我已经使用clojure几个月了,有一件事我真的不明白为什么名称空间名称中的破折号必须在文件系统中表示为下划线。任何人都可以向我解释这一点,是否也可以在文件名中使用破折号?
答案 0 :(得分:31)
这是Java互操作性的必要解决方法。
当Clojure命名空间是AOT(提前)编译成Java .class文件时,它必须具有一个有效的Java标识符的名称。 Dash在Java类名称中无效,因此Clojure将它们转换为下划线。它还会将*
等字符转换为_STAR_
等字词。
答案 1 :(得分:3)
你的意思是说磁盘上的.class
文件是否有强调Clojure中的函数破灭的地方?我确信我读到这与JVM不支持这些文件名中的破折号有关。 (或者至少它不能保证它支持它们。)
这只是类文件名的限制,而Clojure无论如何都会默默地处理这个问题。您自己的代码仍然可以处理文件名中包含破折号的文件。
对不起,我现在没有这方面的参考资料。