2

Enclojure REPL とそこからの clojure モジュールの使用に問題があります。Load/Change REPL to file/ns は、分離された clojure ファイルでは正常に機能しますが、プロジェクトから使用しようとしている別の clojure ファイルへの参照を含むファイルでは機能しません。

正確な手順は次のとおりです。

  • 新しいプロジェクトを作成します。
  • clojure モジュール foobar.clj (名前空間 com.acme.foobar) を作成します。
  • foob​​ar.clj で値を返す関数を定義します。

    (ns com.acme.foobar (:com.acme.othermodule を使用))

    (defn myfunc1 [] "a")

  • Netbeans IDE REPL を開く

  • foob​​ar.clj のコンテキスト メニューから次を選択します。

    • REPL を file/ns に変更します
    • ロード
  • REPL から (myfunc1) 関数を呼び出します。これはうまくいきます:

    com.acme.foobar=> (myfunc1) "a"

foob​​ar から他のファイルを参照しようとすると、問題が発生します。これが私がすることです:

  • 新しい clojure モジュール othermodule.clj を作成します

    (ns com.acme.othermodule)

    (defn fromothermodule [] "b")

  • foob​​ar.clj からこれを呼び出してみます。

    (defn myfunc2 [] (fromothermodule))

  • othermodule.clj のコンテキスト メニューから次を選択します。

    • REPL を file/ns に変更します
    • ロード

新しいモジュールがあることをREPLに認識させるには、実行できる必要があります。

  • 私は今othermodule.cljを参照しているfoobar.cljに同じことをしますが、私は得る:

CompilerException java.io.FileNotFoundException: クラスパスに com/acme/othermodule__init.class または com/acme/othermodule.clj が見つかりませんでした: (NO_SOURCE_FILE:50) com.acme.foobar=>

このエラー メッセージは、"Change REPL to file/ns" と "Load" の両方から発生します。

私は何が欠けていますか?これを実現するには、他のトリックを行う必要がありますか? Run->Clean and Build the main project という絶望的な手段でさえ役に立ちません (もちろん、とにかく REPL ビジネスはかなり苦痛になります)。

NetBeans 6.7.1 と enclojure-plugin-2009-11-3.nbm を使用しています。

4

2 に答える 2

2

Google グループのEric Thorsenから適切な解決策を得ました。

ウィンドウメニューから REPL を作成する方法は 3 つあります。それらのいずれも使用しないでください。代わりに、プロジェクトを右クリックして「プロジェクト REPL を開始」してください。これで、パスが適切に設定されました。

于 2009-11-04T18:52:49.583 に答える
1

私の最初の推奨事項は、NetBeans/Enclojure から IDEA/La Clojure に移行することです。JetBrains は最近、IDE のオープン ソース バージョンを作成し、Clojure プラグインはそこで正常に動作します。これを発見して以来、私は NetBeans と Enclojure を捨てました。La Clojure で働くのは楽しいと思いますが、もちろん、あなたのマイレージは人それぞれです。

NetBeans でこれを行ったときから、Enclojure のソース コードが「lib」というサブディレクトリにあることを覚えているようです。ロードするファイルの名前のディレクトリプレフィックスをいじることで、同様の問題を解決したと思います。おそらく「../lib/YourName」のようなものです。試行錯誤でこれを管理したので、正確なルールと構文を関連付けることはできません。

役立つかもしれない2つのこと:

  • (println (System/getProperty "java.user.dir"))のようなものを実行して、Clojure がどこから実行していると考えているかを調べることができます。

  • 私が行ったように、正しいディレクトリ名にたどり着くまで絶対パスを使用して開始できます。"/home/carl/NetbeansProjects/MyProject/lib/myfile.clj"のようなもの。

于 2009-11-04T16:33:56.720 に答える