2010-08-19 25 views
7

Bunu kullanmak için 'ı kullanmak,Neden garip 'kullanımı ns/Clojure ile kullanım?

(ns myproject.hello) 

Ama' olmadan bir Clojure lib içine ad tanımlar.

(use 'myproject.hello) 

Neden? Bunun arkasında bir mantık var mı? Tanrıda (şemanın diyalektiği) 'kullanamıyorum' (benim projemi kullan) Neden bu düzensizlik?

cevap

15

Kısa yanıt: ns bir makrodur, bu nedenle bağımsız değişkenleri değerlendirilmez. use bir işlevdir, dolayısıyla derleyicinin bunları değerlendirmesini önlemek için argümanlarının alıntılanması gerekir.

Kullanım/gereksinim işlevleri orijinal Clojure tasarımının parçası değildi, katkıda bulunanlar tarafından eklendi. Bir revizyon ihtiyacı var.

3

deyimsel yoludur:

(ns myproject.hello

(: kullanım myproject.world)) bu deyimsel ve fark use` `arasında ne var niye

+0

açıklayabilir misiniz ve '' use' '' '' ın içine koymak? –

+0

Oldukça aynı etkiye sahipler. Bununla birlikte, hem kod okuyucuları hem de otomatik araçların, nelerin dahil edildiğini öğrenmek için ns beyanına bakması daha kolay olduğundan, bu durumun deyimsel yaklaşım olması mantıklıdır. – mikera