2010-08-19 2 views
7

나는 그것을 사용하는 '내가 사용,왜 Clojure와 함께 ns/use에 대한 이상한 사용이 있습니까?

(ns myproject.hello) 

을하지만'없이 Clojure의 lib 디렉토리 내에서 네임 스페이스를 정의합니다.

(use 'myproject.hello) 

왜 그렇습니까? 이 논리 뒤에 어떤 논리가 있습니까? gosh (체계의 방언)에서는 '즉 (myproject 사용)없이 사용합니다. 왜 이런 불규칙성이 있습니까?

답변

15

짧은 대답 : ns은 매크로이므로 인수가 평가되지 않습니다. use은 함수이므로 컴파일러가이를 평가하지 못하도록 인수를 인용해야합니다.

use/require 함수는 Clojure의 원래 디자인의 일부가 아니며 참여자가 추가했습니다. 그들은 정밀 검사가 필요합니다.

3

숙어 방법은 다음과 같습니다

(NS는 myproject.hello

(: 사용 myproject.world))이 관용적이며, 차이가 use` '사이에 무슨 이유

+0

당신이 설명 할 수 그리고': use'를'ns'에 넣으시겠습니까? –

+0

그들은 거의 같은 효과가 있습니다. 그러나 코드 및 자동화 도구를 사용하는 독자가 포함 된 것을 처리하기 위해 ns 선언을 보는 것이 더 쉽습니다. 따라서 관용적 인 접근 방식이 적합합니다. – mikera

관련 문제