평면 세계 n * n 세포를 상상해보십시오. 움직이는 물체가 있습니다. 그들은 충돌 할 수 있고, 과정 중 하나는 파괴되어야합니다.Clojure 에이전트 상호 작용 실패
저는 Rich Hickey의 개미 식민지에서 아이디어를 사용하여 오브젝트를 에이전트로 나타냅니다. 그래서 충돌 후 상담원 중 한 명이 다른 상담원으로부터 메시지를받은 후 작업을 중단해야합니다.
내 문제를 설명하기위한 코드가 있습니다. 두 번째 에이전트가 예기치 않게 중지됩니다.
;agents
(def f_guy (agent nil))
(def s_guy (agent nil))
;functions for agents
(defn f_do [x]
(do
(Thread/sleep 20)
(println "f")
(send-off *agent* f_do)))
(defn s_do [x]
(do
(Thread/sleep 40)
(println "s")
(send-off f_guy nil)
(send-off *agent* s_do)))
;the process
(defn start []
(do
(send-off f_guy f_do)
(send-off s_guy s_do)))
;go
(start)
고맙습니다!
감사! 나는 (f_guy nil을 두 번 보내려고) 두 번 시도했는데 ** java.lang.RuntimeException **이 표시되었다. –