gpt4 book ai didi

clojure - 如何找出 Clojure 代理进入无效状态的原因

转载 作者:行者123 更新时间:2023-12-02 04:53:11 26 4
gpt4 key购买 nike

Clojure 允许使用 set-validator! 根据某些规则检查代理的新状态是否有效。我的验证器发现由于某种原因代理的值被设置为 nil 的情况。但是,我不知道这是怎么发生的——是否有某种方法可以查明试图设置无效状态的操作?

最佳答案

代理也可以使用 watches ,因此向记录所有状态转换的代理添加观察者是非常合理的,这样当出现问题时,您可以使用此日志重播导致失败的转换(并希望由此产生问题)

user> (def x (agent 0))
#'user/x
user> (def states (atom []))
#'user/states
user> (add-watch x :state-logger (fn [& change] (swap! states conj change)))
#<Agent@1dff7647: 0>
user> (send x inc)
#<Agent@1dff7647: 0>
user> (send x dec)
#<Agent@1dff7647: 0>
user> (send x inc)
#<Agent@1dff7647: 1>
user> @states
[(:state-logger #<Agent@1dff7647: 1> 0 1)
(:state-logger #<Agent@1dff7647: 1> 1 0)
(:state-logger #<Agent@1dff7647: 1> 0 1)]

(take 200 ...) 放入 watcher 中可能是明智的,因此您只保留合理数量的状态(或使用环形缓冲区)

关于clojure - 如何找出 Clojure 代理进入无效状态的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com