사람 사이의 차이를 설명 할 수 use
와 require
양으로 직접 사용하는 경우 :use
와 :require
에서 ns
매크로?
답변
require
(아직로드되지 않음)로드 libs와, use
같은 않습니다 플러스 는 자신의 네임 스페이스를 참조 clojure.core/refer
(당신은 또한 사용할 수있는 가능성 얻을 수 있도록 :exclude
와 같은 등 clojure.core/refer
). 둘 다 ns
직접 사용 하지 말고 사용하는 것이 좋습니다 .
답변
require
및 로 외부 함수를 포함하는 것은 관용적 refer
입니다. 네임 스페이스 충돌을 피하고 실제로 사용 / 필요한 함수 만 포함하며 각 함수의 위치를 명시 적으로 선언합니다.
(ns project.core
(:require [ring.middleware.reload :refer [wrap-reload]]))
이 함수에 네임 스페이스를 접두어로 붙여서이 함수를 호출 할 필요는 없습니다.
(wrap-reload) ; works
사용하지 않으면 refer
네임 스페이스를 접두사로 사용해야 합니다.
(ring.middleware.reload/wrap-reload) ; works if you don't use refer in your require
use
대신 선택 하면 (대부분) 항상 다음을 사용하십시오 only
.
(ns project.core
(:use [ring.middleware.reload :only [wrap-reload]]))
그렇지 않으면 모든 것을 포함하여 불필요하게 큰 작업을 수행하고 다른 프로그래머가 함수의 위치를 찾는 것이 매우 혼란 스럽습니다.
또한 이 블로그 를 Clojure 네임 스페이스에 대한 자세한 정보를 얻을 수있는 리소스로 강력히 권장 합니다.
답변
함수를 호출 할 때마다 네임 스페이스를 철자하지 않아도되므로 네임 스페이스 충돌을 일으켜 문제를 일으킬 수도 있지만,이를 사용하면보다 쉽게 만들 수 있습니다. “사용”과 “필수”사이의 좋은 중간 근거는 실제로 사용하는 네임 스페이스의 함수 만 ‘사용’하는 것입니다.
예를 들어 :
( '[clojure-contrib.duck-streams : only (writer reader)] 사용)
또는 네임 스페이스 정의에서 파일 맨 위에 지정하십시오.
(ns com.me.project (: 사용 [clojure.contrib.test-is : only (deftest is run-tests)])))
답변
로 큰 차이를 언급하고있다으로한다는 것입니다 (require 'foo)
, 당신은 다음과 같이 lib 디렉토리의 이름 공간에 이름을 참조 : (foo/bar ...)
당신이 경우에 (use 'foo)
그들은 현재 네임 스페이스에있다 (즉,하고 충돌이없는 제공 무엇이든) 당신이 호출 할 수 있습니다 그들처럼 (bar ...)
.