1

次のコードを検討してください

(use 'midje.sweet)                                                                                                                                                                                                                                                              
(defn x2 [x] (* x x))                                                                                                                                                                                                                                                           
(def fs {:x2 x2})                                                                                                                                                                                                                                                               
(fact                                                                                                                                                                                                                                                                           
  (x2 1) => "one"                                                                                                                                                                                                                                                               
  ((:x2 fs) 1) => "one"                                                                                                                                                                                                                                                         
  (against-background                                                                                                                                                                                                                                                           
    (#'tweetfetcher.core-test/x2 1) => "one"))    

出力する

FAIL at (core_test.clj:177)
    Expected: "one"
      Actual: 1
FAILURE: 1 check failed.  (But 32 succeeded.)

最初のチェックはスタブされ、2 番目のチェックは hashmapx2によって提供されるものとして使用されますfs

参照を除外することを考えると、なぜ (:x2 fs)スタブ化されないのですか?

洞察をありがとう。

4

1 に答える 1

1

このように機能することに驚きはありません。では、として定義された関数(x2 1)をコンパイル時と呼びます。x2(defn x2 [x] (* x x))

では((:x2 fs) 1)、コンパイル時、つまりfs{:x2 x2}わかっていますが、 の結果はまだわかっていません(:x2 fs)。つまり、展開(:x2 fs)中に式が評価されないということfactです。それはおそらく(:x2 fs)、それが関数に解決される var ではないことを認識しているため、それをスタブ (内部) に関連付けることは何もしませんagainst-background

于 2016-06-04T09:33:27.010 に答える