この状況は再現するのが非常に難しいです。最初に私は含まCLJファイルを作成します。この特定の状況でsource-fnがソースコードを見つけられないのはなぜですか?
(ns myns)
(defn myfn [x] x)
その後、私は含有する第二CLJファイルを作成:
(ns myns2
(:require [myns :as m]
[clojure.repl :as repl]))
(comment
(second (iterate repl/source-fn 'm/myfn))
(take 2 (iterate repl/source-fn 'm/myfn))
)
をそれから私は、REPLを起動し、その第二のファイルをロードします。最後に、両方のコメントをREPLに送信して評価します。最初の式は期待どおり"(defn myfn [x] x)"
になります。しかし、2番目の式は'(m/myfn nil)
です。ここで何が起こっているのですか?
'm/myfn as' myns/myfnを完全修飾すると、一致する動作が復元されることに注意してください。また、iterating source-fnはちょっと変なものだと私は理解していますが、これは動作を再現するために私が知っている最も簡単な方法です。
一つの違い:evalの中に 'second'、'ソースfn'の実行と
lein test
を経由してファイルから実行すると、私は異なる結果を取得していますREPLのステップ。 'take 2'では、' 'source-fn''は印刷の段階で(遅延のために)実行されます。 – ez121sl