Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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-原子何时被解除引用?_Clojure_Thread Safety - Fatal编程技术网

Clojure-原子何时被解除引用?

Clojure-原子何时被解除引用?,clojure,thread-safety,Clojure,Thread Safety,我对Clojure中原子的解引用感到困惑。在下面的部分中,我有一个服务器请求函数,它接收数据并更新请求结果数据,这只是一个由请求ID索引的映射。该函数将一直阻止,直到服务器发送完数据,并返回请求ID。下面的第一个代码段按预期工作。第二个没有,因为(看起来)@请求结果数据在函数返回之前被取消引用 ;works (let [req-id (server-request "parameters")] (pprint (@request-result-data req-id))) ;returns

我对Clojure中原子的解引用感到困惑。在下面的部分中,我有一个
服务器请求
函数,它接收数据并更新
请求结果数据
,这只是一个由请求ID索引的映射。该函数将一直阻止,直到服务器发送完数据,并返回请求ID。下面的第一个代码段按预期工作。第二个没有,因为(看起来)@请求结果数据在函数返回之前被取消引用

;works
(let [req-id (server-request "parameters")]
  (pprint (@request-result-data req-id)))

;returns nil
(pprint (@request-result-data (server-request "parameters"))))
这是正常的行为吗?有没有更好的编码方法?从直觉上看,我似乎不需要一个
let


谢谢,

如果
服务器请求
函数正在修改
请求结果数据
原子,那么您确实需要使用第一个表单来确保事情按正确的顺序发生。如果您有一个函数调用
(E1 E2)
,则不应依赖于以任何特定顺序计算的
E1
E2


如果没有任何其他上下文,我想知道为什么不能让
服务器请求
返回信息而不是将其放入atom中,但这超出了您原来的问题。

如果
服务器请求
函数正在修改
请求结果数据
atom,当然,您需要使用第一种形式来确保事情按正确的顺序发生。如果您有一个函数调用
(E1 E2)
,则不应依赖于以任何特定顺序计算的
E1
E2


如果没有任何其他上下文,我想知道为什么您不能让
服务器请求
返回信息,而不是将其放入atom中,但这超出了您最初的问题。

我错过了
并更新了请求结果数据部分。请显示
服务器请求
功能的详细信息。在处理排序副作用时,顺序很重要,因此如果没有所有信息,很难确定问题出在哪里。谢谢-在处理您无权访问的服务器时,很难给出完整/可验证的示例!嗯,可能不是一个可运行的示例,但是如果我们看到函数,解释行为就会更容易。我错过了
部分并更新了请求结果数据。请显示
服务器请求
功能的详细信息。在处理排序副作用时,顺序很重要,因此如果没有所有信息,很难确定问题出在哪里。谢谢-在处理您无权访问的服务器时,很难给出完整/可验证的示例!嗯,可能不是一个可运行的示例,但是如果我们看到了函数,那么解释行为就会更容易。谢谢-服务器请求是一个围绕Java API的包装器,异步发送数据,我将在atom中缓存数据,直到请求完成。“你不应该依赖于E1或E2以任何特定顺序进行计算。”我认为这不是真的。保证函数被求值,然后它的每一个参数都按这个顺序求值。尽管如此,我认为这不是一个共同的理解,因此我认为这会降低代码的可读性。谢谢-服务器请求是围绕异步发送数据的Java API的包装器,我将数据缓存在atom中,直到请求完成。“你不应该依赖E1或E2以任何特定的顺序进行计算”,我认为这是不对的。保证函数被求值,然后它的每个参数都按这个顺序求值。即使如此,我认为这不是一个共同的理解,因此我认为这会降低代码的可读性。