2010-08-19 10 views
7

zdefiniować nazw wewnątrz lib Clojure bez „Dlaczego jest to dziwne "użycie ns/use z Clojure?

(ns myproject.hello) 

Ale używam” do korzystania z niej.

(use 'myproject.hello) 

Dlaczego tak jest? Czy jest za tym jakaś logika? W gosh (dialekt schematu) używam bez "ie.e (use myproject). Dlaczego ta nieprawidłowość?

Odpowiedz

15

Krótka odpowiedź: ns to makro, więc jego argumenty nie są analizowane. use jest funkcją, więc jej argumenty muszą być cytowane, aby uniemożliwić kompilatorowi ich ocenę.

Funkcje użytkowania/wymagające nie były częścią oryginalnego projektu Clojure, zostały dodane przez autorów. Potrzebują gruntownych zmian.

3

idiomatyczne sposobem jest:

(ns myproject.hello

(Use myproject.world))

+0

mógłbyś wyjaśnić, dlaczego tak jest idiomatyczne i jaka jest różnica między 'use' i wstawienie ': use' wewnątrz' ns'? –

+0

Mają prawie taki sam efekt. Jednak zarówno czytelnikom kodu, jak i zautomatyzowanym narzędziom łatwiej jest przyjrzeć się deklaracji ns, aby dowiedzieć się, co jest zawarte, więc ma sens, aby było to podejście idiomatyczne. – mikera

Powiązane problemy