cljc文件的基本功能

时间:2016-07-30 18:01:31

标签: clojure clojurescript

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

这是对的吗?它似乎隐含在Using cljc的主要文档页面中 和reader conditions,但据我所知,它从未明确说明。

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

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:6)

细微差别是加载的优先顺序,在此解释:

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

简而言之,cljc文件最后加载,条件只在cljc中有效。