cljc文件的基本功能

22
通常情况下,Clojure源文件的命名方式为(例如)foo.clj,而ClojureScript源文件的命名方式为foo.cljs。我的印象是,在Clojure版本>=1.7中,如果我想要使用require或use从Clojure和ClojureScript中加载一个文件,则可以将文件命名为foo.cljc。这个说法正确吗?在使用cljcreader conditions的主要文档页面中,似乎隐含了这一点,但据我所见,从未明确说明。
这不是关于在Clojure和Clojurescript中使用读者条件来指定备用代码的问题,而是更基础的问题。例如,我有一个包含完全通用代码的源文件:它将在Clojure和Clojurescript中运行且不需要修改。我可以假设通过以“.cljc”命名,require 将始终从Clojure和Clojurescript内部找到它(假设命名正确,位于正确位置等)吗?[我相当肯定自己是正确的,但我并不确定,如果我是正确的,我认为在这里记录答案是值得的。]

嗯,好问题!似乎这个问题已经被认为是理所当然的了。我会说是的,你对cljc文件的目的和功能的理解是正确的,但正如你在问题中所述,找到官方声明又是另一回事了。也许Alex Miller可以发表一个明确的答案。 - Sam Estep
即使没有官方声明,我也会对经验丰富、知识渊博的用户的自信断言感到满意,@SamEstep。当然,像Alex Miller这样的人发表声明会更好,基本上就是官方声明了,但似乎并不必要。如果你足够有信心认为事情就是这样,你可能想回答。 - Mars
我认为自己在Clojure方面经验丰富、知识渊博,但在ClojureScript方面并不是。我会让Clojure核心开发人员或同时是Clojure和ClojureScript开发人员,并且比我更广泛地使用cljc文件的人来回答你的问题。 - Sam Estep
2个回答

26

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

你仍然需要确保它在类路径上可用,就像其他源文件一样。


9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接