通常,Clojure源文件被命名为(例如)foo.clj,而Clojurescript源文件被命名为foo.cljs。我的印象是,在Clojure版本> = 1.7中,我可以将文件命名为foo.cljc,如果我希望它可以从Clojure和Clojurescript加载require
或use
。
这是对的吗?它似乎隐含在Using cljc的主要文档页面中 和reader conditions,但据我所知,它从未明确说明。
这不是关于使用reader条件来指定在Clojure和Clojurescript中运行的备用代码的问题;它更基本。例如,我有一个源文件,其中包含完全通用的代码:它将在Clojure和Clojurescript中保持不变。我可以假设用" .cljc"命名它,require
将始终从Clojure和Clojurescript中找到它(假设它的名字正确,位于正确的位置,等等。)?
[我很确定我是对的,但我不确定,我认为如果我正确的话,在这里记录答案是值得的。] < / p>
答案 0 :(得分:14)
那是对的。当Clojure或ClojureScript需要加载命名空间时,它们首先查找特定于平台的文件(.class然后是Clojure上的.clj和ClojureScript上的.cljs),如果找不到,那么它们会查找.cljc文件。
您仍然需要确保它可用于类路径上的语言,就像其他源文件一样。
答案 1 :(得分:6)
是
细微差别是加载的优先顺序,在此解释:
https://github.com/clojure/clojure-site/commit/010134bcc2e8af899ba2b1e5816b0fcf7e007ba4
简而言之,cljc文件最后加载,条件只在cljc中有效。