我试图在另一个函数中使用'new'中的值,但是看起来下面给出的代码是错误的。
我不知道为什么。
我将函数'token-generator'包装在延迟中,因为我只希望它在当前旧令牌值到期时运行'token-generator'函数来获取新令牌。
(def r (let [new (delay (token-generator state))]
(if (compare-and-set! token old new)
new
@token)))
(prn r) -> nil
(prn @r) -> NullPointerException clojure.core/deref-future (core.clj:2208)
请协助!谢谢!
Edit1:“ token”是保存最后收到的令牌的变量,“ old”是最后使用的令牌。在程序范围上,它们可以有所不同。
Edit2:添加了@token(最后一行)
答案 0 :(得分:1)
如果您在问题中提供了更多详细信息,如预期的输入和输出数据以及缺少的代码(即token
是什么),这将有所帮助。
您可能打算像这样取消引用new
:
(if (compare-and-set! token old @new)
有关概述,请参见The Clojure CheatSheet。查找atom
,delay
,deliver
,deref
(也称为@
)的定义。
您可能还希望在最后一行上插入@token
。