답변:
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 네임 스페이스에 대한 자세한 정보를 얻을 수있는 리소스로 강력히 권장 합니다.
(:use foo :only [bar])
와 끝 사이에 차이가 있는지 알고 (:require foo :refer [bar])
있습니까? 이 작업을 수행하는 두 가지 방법이 이상하게 보입니다.
(:require .. :refer ..)
효과적으로 비추천 할 수있는 것과 같은 일을하는 새로운 방법 :use
입니다. 이에는 몇 가지 단점이 있습니다.
함수를 호출 할 때마다 네임 스페이스를 철자하지 않아도되므로 네임 스페이스 충돌을 일으켜 문제를 일으킬 수도 있지만,이를 사용하면보다 쉽게 만들 수 있습니다. "사용"과 "필수"사이의 좋은 중간 근거는 실제로 사용하는 네임 스페이스의 함수 만 '사용'하는 것입니다.
예를 들어 :
( '[clojure-contrib.duck-streams : only (writer reader)] 사용)또는 네임 스페이스 정의에서 파일 맨 위에 지정하십시오.
(ns com.me.project (: 사용 [clojure.contrib.test-is : only (deftest is run-tests)])))
(ns ...)
구문 을 포함시켜 주셔서 감사 합니다. 나는 그것을 찾고 있었지만 내가 찾은 모든 예는 명백했다 (use ...)
.
(require '[namepase :refer [var-name1 var-name2]])