2013-04-01 8 views

cevap

17

yana ^:dynamic meta tutmalarına, binding da with-redefs yapılan bağlar tüm parçacıkları görebilir ise, mevcut iplik görülür bağları oluşturur. Yani, with-redefs çok künt bir araçtır ve aynı VM'de çalışan diğer kodları etkileme potansiyeline sahiptir. Test kodunun dışında hiç kullanılmamış with-redefs'u da görmedim (en azından benim görüşüme göre).

  • ^ile bağlama:

    ben böylece ikisi arasındaki farkı özetlemek istiyorum dinamik Eğer kontrollü bir şekilde dinamik davranışının biraz tanıtmak için izin verir. Arayanların çağrı zincirini en üst düzeye çıkarmasına olanak tanıyan bir API'daki uzantı noktalarını tanımlamanın iyi bir yolu, çağrı yığınından (bazılarının kodları bile olmayabilir) parametrelerini açıkça iletmek zorunda kalmadan kodunuzun davranışını değiştirir.

  • redefs ile herkes için ücretsizdir. Testte faydalıdır, örn. Test altındaki fonksiyon birçok bağımlılığa sahip olduğunda tüm alt sistemlerin alay edilmesi için.

birlikte (örneğin *my-dynamic-var*) dinamik değişkenler isim earmuffs kullanmanın kongre ile ^:dynamic olarak bir var bildirme, bu reklam kendinden belgeleyen yolu arayanlara olduğunu avantaj vardır senin kodun bir parçası olabilir dinamik olarak değiştirilmelidir. API'leri ve üretim kodu yazarken dinamik ve bağlayıcı:

Özetle

: ^tercih ederim. - redefs ile testlerde kullanın ve kontrolünüz dışında ^:dynamic bildirilmemiş olan varyasyonların davranışını dinamik olarak değiştirmek için son çare olarak (ve sonra dikkatli kullanın).

+0

İyi cevap. Bu kulaklık isimlendirme kuralını gördüm ve ne anlama geldiğini anlamadım. Bu adlandırma kuralını dinamik olan işlevlere mi, yoksa sadece ilkel değerlere mi kullanmalıyım? –

+0

Genel API'de bir işlev için bir 'defn' üzerinde hiç bir zaman kulaklık görmedim. Dinamik olarak bağlı bir işlev için şu satırlarda bir şeyler yaparım: https://gist.github.com/alexhall/5286484 – Alex

+0

Bu mantıklı. Clj-http projesine baktığımda da öyle değil. Dinamikleri defn üzerine koyar. –