cljc文件的基本功能

Mar*_*ars 13 clojure clojurescript

通常,Clojure源文件被命名为(例如)foo.clj,而Clojurescript源文件被命名为foo.cljs.我的印象是,在Clojure的版本> = 1.7,我可以命名一个文件foo.cljc如果我希望它是可与加载requireuse无论从Clojure的和Clojurescript.

它是否正确?它似乎隐含在使用cljc读取器条件的主要文档页面中,但据我所知,它从未明确说明.

这不是关于使用reader条件来指定在Clojure和Clojurescript中运行的备用代码的问题.它更基本.例如,我有一个源文件,其中包含完全通用的代码:它将在Clojure和Clojurescript中运行不变.我可以假设通过命名为".cljc",require总是会从Clojure和Clojurescript中找到它(假设它的名字正确,位于正确的位置,等等)?

[我很确定我是对的,但我不确定,我认为如果我是正确的话,在这里记录答案是值得的.]

Ale*_*ler 16

那是对的.当Clojure或ClojureScript需要加载命名空间时,它们首先查找特定于平台的文件(.class然后是Clojure上的.clj和ClojureScript上的.cljs),如果找不到,则查找.cljc文件.

您仍然需要确保它可用于类路径上的语言,就像其他源文件一样.


Tim*_*ley 7

是。

细微差别是加载的优先顺序,在此进行说明:

https://github.com/clojure/clojure-site/commit/010134bcc2e8af899ba2b1e5816b0fcf7e007ba4

简而言之,cljc文件最后被加载,条件语句仅在cljc中有效。