初心者のClojureとleiningenの質問:
以下の私のプロジェクトのコードスニペットを考えると、これはleinreplから機能します。
==> (-main "something")
期待される「コマンド:何か...実行中...完了」を生成しますが、コマンドラインからは機能しません:
me pallet1]lein run "something"
「コマンド:何か...エラー:コマンドとして解決されていません」を生成します
なんで?/どうすれば修正できますか?
再現するには:
lein new eg
次に、生成されたプロジェクトファイルを編集し、追加:main eg.core
してメイン関数を定義し、生成されたsrc / eg / core.cljファイルを編集して、次の場所に貼り付けます。
core.clj
(ns eg.core)
(defn something [] (println "Something!"))
(defn run-command-if-any [^String commandname]
(printf "Command: %s ..." commandname)
(if-let [cmd (ns-resolve *ns* (symbol commandname))]
(
(println "running ...") (cmd) (println "done.")
)
(println "error: not resolved as a command.")
))
(defn -main [ commandname ] (run-command-if-any commandname))
それで
lein repl
eg.core=> (-main "something")
動作します(つまり、「Something!」を出力しますが、lein runは動作しません(つまり、「error:notresolved」メッセージを出力します)