2010-12-12 61 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

相關問題