2012-05-09 7 views
1

最小限の障害ケース送信呼び出し:?のClojure:NS-解決 - >エージェントを取得 - >それに

(ns test) 

(def a (agent "hello")) 

(send a (fn [x] "world")) ; works 

(send (ns-resolve 'test 'a) (fn [x] "test")) ; fails 

質問:

なぜ最後の行ができないのを

これはコードのホットローディングシステムの一部です。私はns-resolveを使用する必要があります。

これを行う方法はありますか?

ありがとうございます!

答えて

3

ns-resolveは、var(エージェント)の値ではなく、varを返します。あなたは値を取得するためにvarをderefする必要があります:

(send (deref (ns-resolve 'test 'a)) (fn [x] "world")) 
;; or 
(send @(ns-resolve 'test 'a) (fn [x] "world")) 
+0

今や意味があります。ありがとう! – user1383359

関連する問題