lein repl
を作成したときに、名前空間から関数を問題なく呼び出すことができlein new app ...
ます。lein repl
しかし、 を介してライブラリ プロジェクトを作成しただけでは、関数を呼び出すことができないようですlein new ...
。詳細は次のとおりです。
たとえば を使用して lein アプリを作成しlein new app my-app
、プロジェクト ディレクトリ ( を含むディレクトリproject.clj
) からlein repl
. repl は私を名前空間に残しますmy-app.core
my-app.core=>
サイドファイルで定義された関数であっても、repl で関数を呼び出すことができるようになりました。
my-app.core=> (-main)
; Hello, world!
my-app.core=> (my-app.anotherfile/foo)
; Hey, there; this is foo from anotherfile
:require [my-app.anotherfile]
の ns マクロにある限り、 core.clj
.
わかりました。今、私はleinライブラリでも同様にやりたいと思っています。だから私lein new my-lib
は、そしてlein repl
、そして私はuser
名前空間にいます:
user=>
は?さて、私のライブラリには呼び出したい関数が含まれています (これは leiningen がデフォルトで作成するものです)
(ns my-lib.core)
(defn foo
"I don't do a whole lot."
[x]
(println x "Hello, World!"))
私は試します
user=> (in-ns 'my-lib.core)
my-lib.core=> (foo 42)
; CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(NO_SOURCE_PATH:1:1)
いいえ。これはどう?
user=> (my-lib.core/foo 42)
; ClassNotFoundException two-files-lib.core java.net.URLClassLoader$1.run (URLClassLoader.java:202
あはは!別のエラーですが、まだ解決策が見えません。lein compile
そしてlein javac
何もしていないようです。
ドキュメントやオンラインで正しい呪文を見つけたり推測したりすることができませんでした。アドバイスをいただければ幸いです。