2010-12-12 57 views

回答

26

这是Java互操作性的必要解决方法。

当Clojure名称空间是AOT(提前编译)到Java.class文件中时,它必须有一个名称是一个有效的Java标识符。 Dash在Java类名中无效,所以Clojure将它们转换为下划线。它还将*等字符转换为像_STAR_这样的字词。

+0

它不是AOT吗? – Chris 2012-01-23 15:52:47

+0

编号Clojure编译总是相同的。 AOT编译只需将类文件写入磁盘。 – 2012-03-09 23:31:58

3

你的意思是磁盘上的.class文件有下划线,Clojure中的函数有破折号?我确信我读过这是与JVM不支持这些文件名中的破折号有关。 (或者至少它不能保证它支持它们。)

这只是类文件名的限制,Clojure无声无息地处理这个问题。您自己的代码仍然可以处理文件名中带有破折号的文件。

很抱歉,我现在没有这方面的参考资料。

+0

我试着把破折号写入clj文件,但我的clojure程序不能读取这些文件,除非我更改下划线来强调 – Zubair 2010-12-12 13:27:59

+0

是的,这是由于JVM的限制。请参见http://clojure.org/libs“lib名称中的连字符替换为路径中的下划线” – 2010-12-13 04:26:33

+0

答案在“您自己的代码仍然可以在文件名中使用破折号处理文件时”的意思是什么。这是指.clj文件还是.class文件? – Zubair 2010-12-13 22:06:46

相关问题