2016-07-30 71 views
3

通常,Clojure源文件被命名为(例如)foo.clj,而Clojurescript源文件命名为foo.cljs。我的印象是,在Clojure版本大于1.7的情况下,如果我希望可以使用来自Clojure和Clojurescript的requireuse加载,我可以命名文件foo.cljc。cljc文件的基本功能

这是正确的吗?这似乎暗示在Using cljcreader conditions的主要文档页面上,但据我所知,它从未明确声明。

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

[我敢肯定,我是对的,但我不能肯定,我认为这将是值得拥有的记录在这里,如果我正确的答案。]

+0

嗯,好问题!似乎到目前为止它已被认为是理所当然的。我会说**是**,您对cljc文件的目的和功能的理解是正确的,但是正如您在您的问题中所述,找到官方声明是另一回事。也许Alex Miller可以发表明确的答案。 –

+0

即使没有官方声明,@SamEstep,我对经验丰富且知识渊博的用户的自信断言感到满意。像Alex Miller这样的人的陈述当然会更好 - 这确实使官方,非常 - 但似乎没有必要。如果你对此感到足够自信,那么你可能想回答。 – Mars

+0

我认为自己在Clojure中经验丰富,知识丰富,但在ClojureScript中没有。我会让一位Clojure核心开发人员或同时是Clojure开发人员和ClojureScript开发人员的人员,以及比我更广泛地使用cljc文件的人员回答您的问题。 –

回答

5

这是正确的。当Clojure或ClojureScript需要加载名称空间时,他们首先查找特定于平台的文件(.class,然后在Clojure上使用.clj,在ClojureScript上使用.cljs),如果找不到,则查找.cljc文件。

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