cljc 文件的基本功能

Basic functionality of cljc files

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

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

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

[我很确定我是对的,但我不确定,而且我认为如果我是正确的,将答案记录在此处是值得的。]

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

与其他源文件一样,您仍然需要确保它对 class 路径上的语言可用。

是的。

细微差别是加载的优先级,这里解释一下:

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

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