Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何提取函数token generator返回的值:(延迟(token generator状态))_Clojure - Fatal编程技术网

Clojure 如何提取函数token generator返回的值:(延迟(token generator状态))

Clojure 如何提取函数token generator返回的值:(延迟(token generator状态)),clojure,Clojure,我试图在另一个函数中使用“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

我试图在另一个函数中使用“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(最后一行)

如果您在问题中提供更多细节,例如预期的输入和输出数据,以及缺少的代码(即什么是
token
?)


您可能打算删除
new
,例如:

(if (compare-and-set! token old @new)
有关概述,请参阅。查找
atom
delay
deliver
deref
(又称
@
)的定义


最后一行可能还需要
@token

谢谢你@AlanThompson,但是我如何实现所需的行为?i、 e.运行函数“token generator”仅在当前旧令牌值过期时获取新令牌,前提是令牌值存储为原子。(如果(比较并设置!token old@new)有效..谢谢Alan!!@Alan Thompson您的目标是保持“有效”每当您请求令牌时,我都会将其作为函数写入,并将最后一个令牌保存在atom中。然后,请求有效令牌的函数可以检查超时情况。@cfrick我持有一个“有效令牌”,我想做的是,当令牌过期时,调用此函数,该函数包含“比较并设置!令牌旧-新”,其中“新”保留延迟以生成新令牌,并返回该令牌。