Ced*_*tin 4 alias namespaces clojure clojurescript
当我阅读Clojure代码(比如来自GitHub上的各种项目时)时,我有一些不太了解的东西:在:require表达式中,:as当你只使用你所指的函数时,你应该使用它:refer吗?此外,我不太确定Clojure和ClojureScript之间是否存在任何差异,也不存在任何约定.
例如(我正在使用猫库作为示例,但这只是一个示例)如果我这样做:
(ns example.core
(:require
[cats.core]
[cats.monad.maybe :as maybe]))
Run Code Online (Sandbox Code Playgroud)
从REPL我可以这样做:
REPL> (cats.core/mappend (maybe/just 1))
Run Code Online (Sandbox Code Playgroud)
但它不是很方便,所以我可以这样做:
(ns example.core
(:require
[cats.core :as m]
[cats.monad.maybe :as maybe]))
REPL> (m/mappend (maybe/just 1))
Run Code Online (Sandbox Code Playgroud)
现在,如果我一直使用mappend(和其他几个),我可以这样做:
(ns example.core
(:require
[cats.core :refer [mappend]]
[cats.monad.maybe :as maybe]))
REPL> (mappend (maybe/just 1))
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:是否有在同时使用任何用途:as和:refer,就像下面的例子吗?
(ns example.core
(:require
[cats.core :as m :refer [mappend]] ; does this make any sense?
[cats.monad.maybe :as maybe]))
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用,也就是说,mappend所有的时间和可能想直接把它称为mappend,但bind不是经常使用:refer,但还往往不够,这样写cats.core/bind是不是方便,所以我会使用m/bind?
那么有什么规则吗?就像你正在使用:as你不应该使用:refer,或者反过来?或者你应该总是同时使用两者?
那么ClojureScript,它的工作方式是否完全相同?
你是对的用例; 你经常使用的东西,你可能想:refer直接,否则,只需使用:as别名来访问它.两者都没有问题.
我个人倾向于更喜欢,:as除非它非常清楚:refered函数来自哪个命名空间(例如,我会认识到>!!没有前缀,但发现m/bind更具可读性).
最广泛使用的风格指南AFAIK表明,在结合使用它们是好的,但更喜欢:as到:refer在大多数情况下:https://github.com/bbatsov/clojure-style-guide#comprehensive-ns-declaration
Clojurescript应该是完全一样的:refer,并:as在ns.