通常,Clojure源文件被命名为(例如) foo.clj,而Clojurescript源文件被命名为foo.cljs。我的印象是,在Clojure版本Clojure1.7中,如果我希望文件可以从>=和Clojurescript1.7中加载到require或use中,我可以将其命名为foo.cljc。
这是正确的吗?这似乎隐含在关于Using cljc和reader conditions的主要文档页面中,但据我所知,它从未明确说明过。
这不是关于使用读取器条件来指定在Clojure和Clojurescript中运行的替代代码的问题;它更基本。例如,我有一个源文件,其中包含完全通用的代码:它可以不加更改地在Clojure和Clojurescript中运行。我是否可以假设,通过使用".cljc“命名,require总是可以从Clojure和Clojurescript内部找到它(假设它的命名正确,位置正确,等等)?
我非常确定我是正确的,但我不确定,我认为如果我是正确的,那么将答案记录在这里是值得的。
发布于 2016-07-31 07:26:49
是这样的。当Clojure或ClojureScript需要加载名称空间时,它们首先查找特定于平台的文件(在Clojure上查找.class,然后在Clojure上查找.clj,在ClojureScript上查找.cljs ),如果没有找到,则查找.cljc文件。
您仍然需要确保它对于类路径上的语言是可用的,就像其他源文件一样。
发布于 2016-07-31 07:27:53
是。
细微差别是加载的优先级,如下所述:
https://github.com/clojure/clojure-site/commit/010134bcc2e8af899ba2b1e5816b0fcf7e007ba4
简而言之,cljc文件最后加载,条件条件只在cljc中有效。
https://stackoverflow.com/questions/38676944
复制相似问题