2010-12-12 9 views
21

私は数ヶ月前からclojureを使用してきましたが、私が実際に理解していないことの1つは、名前空間の名前のダッシュがファイルシステムのアンダースコアとして表されなければならない理由です。誰もがこれを私に説明することができますか?ファイル名にダッシュを使用することも可能ですか?なぜclojureは名前のダッシュをファイルシステムの下線に変換するのですか?

答えて

26

これはJavaの相互運用性に必要な回避策です。

ClojureネームスペースがJava .classファイルにコンパイルされたAOT(予定時間)の場合、有効なJava IDである名前を持つ必要があります。 Javaクラス名ではダッシュは有効ではないため、Clojureはそれらをアンダースコアに変換します。また、*のような文字を_STAR_のような単語に変換します。

+0

それはAOTではないのですか? – Chris

+0

いいえ。Clojureのコンパイルは常に同じです。 AOTコンパイルでは、クラスファイルをディスクに書き込むだけです。 –

3

ディスク上の.classファイルには、Clojureの機能に下線が付いていますか?これらのファイル名でダッシュをサポートしていないJVMとは関係があると私は確信しています。 (少なくとも、それがサポートされているという保証はありません)

これはクラスファイル名の制限に過ぎず、Clojureはこの問題を静かに処理します。あなた自身のコードでも、ファイル名にダッシュを含むファイルを扱うことができます。

申し訳ありませんが、私はこの資料の参考になっていません。

+0

ダッシュをcljファイルに入れようとしましたが、ダッシュをアンダースコアに変更しない限り、clojureプログラムはファイルを読み取れません。 – Zubair

+0

はい、これはJVMの制限のためです。 http://clojure.org/libsを参照してください。lib名のハイフンはパスのアンダースコアに置き換えられます。 –

+0

「自分のコードでもファイル名にダッシュを含むファイルを処理できる」と答えたときの意味は何ですか?これは.cljファイルまたは.classファイルを参照していますか? – Zubair

関連する問題