Clojure cljc文件的基本功能

Clojure cljc文件的基本功能,clojure,clojurescript,Clojure,Clojurescript,通常,Clojure源文件名为(例如)foo.clj,Clojurescript源文件名为foo.cljs。我的印象是,在Clojure versions>=1.7中,如果我希望可以使用Clojure和Clojurescript中的require或use加载文件,我可以将其命名为foo.cljc 这是正确的吗?它似乎隐含在上的主要文档页面中 而且,据我所知,它从来没有被明确说明过 这不是一个关于使用reader条件指定在Clojure和Clojurescript中运行的备用代码的问题;这是更基本

通常,Clojure源文件名为(例如)foo.clj,Clojurescript源文件名为foo.cljs。我的印象是,在Clojure versions>=1.7中,如果我希望可以使用Clojure和Clojurescript中的
require
use
加载文件,我可以将其命名为foo.cljc

这是正确的吗?它似乎隐含在上的主要文档页面中 而且,据我所知,它从来没有被明确说明过

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


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

没错。当Clojure或ClojureScript需要加载名称空间时,它们首先查找特定于平台的文件(.class-then.clj-on-Clojure和.cljs-on-ClojureScript),如果找不到,则查找.cljc文件

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

细微差别是加载的优先顺序,如下所述:


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

Hmm,好问题!到目前为止,这似乎是理所当然的。我想说是的,您对cljc文件的用途和功能的理解是正确的,但是正如您在问题中所说的,找到一个官方声明是另一回事。“也许亚历克斯·米勒可以给出一个明确的答案。即使没有官方声明,我也会对一位经验丰富、知识渊博的用户的自信断言感到满意,”SamEstep说。当然,像亚历克斯·米勒这样的人发表一份声明会更好——这确实让它变得非常正式——但似乎没有必要。如果你有足够的信心,这就是事情的真相,你可能会想回答。我认为我自己的经验和知识的克洛热尔,但不是在CuluScript。我会让Clojure的核心开发人员或者既是Clojure开发人员又是ClojureScript开发人员,并且比我更广泛地使用cljc文件的人回答您的问题。