我有以下功能:
(defn best-move [tracked-moves]
(def all-scores (ref tracked-moves))
@all-scores)
它被递归函数调用。 我希望能够继续通过跟踪移动,并让它们全部存在于其中 @所有得分。 现在它的编写方式,@ all-scores只会保留最后的跟踪动作。如何在每次调用最佳移动函数时保持它接收的所有数据?而且不只是返回它收到的所有数据的最后一个?
答案 0 :(得分:2)
问题是您错误地使用了def
。使用def
(和defn
)将创建命名空间级别的var。你拨打def
的地方并不重要。正如您所指出的那样,您不断重新定义all-scores
。简短的回答是将all-scores
的定义提升到最高级别,因此您不会经常调用它。然后,按照documentation中的说明更新ref
。如果您不使用交易,并且不需要管理多个参考,则可能需要使用atoms。