Clojure 코드 (GitHub의 다양한 프로젝트에서 말한 것)를 읽을 때 이해할 수없는 부분이 있습니다. :require
표현식에서 사용하고있는 함수 만 사용하는 경우 :as
을 사용해야합니다. :refer
? 또한 그 관점에서 Clojure와 ClojureScript 사이에 차이가 있는지, 어떤 규칙이 있는지는 확실하지 않습니다.Are :를 참조하십시오 : 동시에 사용 하시겠습니까?
예를 들어 (나는 예는 고양이 라이브러리를 사용하고 있지만, 그건 그냥 예입니다) 나는이 할 경우 :
말에서(ns example.core
(:require
[cats.core]
[cats.monad.maybe :as maybe]))
의 REPL 나는이 작업을 수행 할 수 있습니다
REPL> (cats.core/mappend (maybe/just 1))
을
그러나 그것은 매우 편리하지, 그래서 내가 대신이 작업을 수행 할 수 있습니다
는(ns example.core
(:require
[cats.core :as m]
[cats.monad.maybe :as maybe]))
REPL> (m/mappend (maybe/just 1))
이제 경우에 나는을 사용(그리고 몇 가지 다른) 모든 시간, 내가 할 수있는 :
(ns example.core
(:require
[cats.core :refer [mappend]]
[cats.monad.maybe :as maybe]))
REPL> (mappend (maybe/just 1))
그래서 내 질문은 : 다음 예에서와 같이 모두 :as
및 :refer
을 사용하여 어떤 사용이?
(ns example.core
(:require
[cats.core :as m :refer [mappend]] ; does this make any sense?
[cats.monad.maybe :as maybe]))
은 내가, 말, mappend
모든 시간을 사용 할 수 있으며, 자주 그 cats.core/bind
를 작성 그래서 아직을 :refer
하지만 를 사용하여 mappend
하지만 같은 것을 자주 bind
하지로 직접 참조 할 수 있음을 이해 편리하지 않아서 m/bind
을 사용하고 싶습니까?
그렇다면 어떤 규칙이 있습니까? :as
을 사용하는 경우와 마찬가지로 :refer
을 사용하면 안되며 다른 방법으로 사용 하시겠습니까? 아니면 항상 둘 다 사용해야합니까?
ClojureScript는 정확히 같은 방식으로 작동합니까?
예, 네임 스페이스 접두어없이'core : async 'primitives'를 사용하려고 할 때 (': refer [!]')와 같은 충돌을 피할 필요가있을 때와 같이 동시에 둘 다 사용하려고 할 때가 있습니다. Clojure 코어 ('async/into'). – glts
@glts : 아 매우 흥미 롭습니다. 그리고 나는 충돌에 대해 생각하지 않았습니다. 많은 의미가 있습니다. 둘 다 감사합니다. –