Clojure - send-off

在某些情况下,代理被分配了本质上是阻塞的功能。 一个简单的例子是,假设您正在从本身是阻塞的文件中读取内容。 因此发送函数首先会立即返回代理并继续文件操作。 文件操作完成后,它将自动使用文件内容更新代理。

语法

语法如下。

(send agentname function value)

参数 − 'agentname'是发送函数被重定向到的代理。 "function"用于确定代理的值将以何种方式更改。 在我们的例子中,我们将使用加法 + 符号向代理的现有值添加一个值。 "Value"是传递给函数的值,该函数将用于相应地更新代理的值。

返回值 − 如果存在非阻塞函数,首先按原样返回代理。 最后,返回一个具有新值的代理对象。

示例

以下程序显示了如何使用它的示例。

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def counter (agent 0))
   (println @counter)
   
   (send-off counter + 100)
   (println @counter)
   (println @counter))
(Example)

我们正在查看递增计数器值的相同示例,但从以下输出中可以清楚地看出发送函数的作用。

输出

上面的程序产生以下输出。

0
0
0

可以看出,即使我们向代理发送了一个将值设置为 100 的函数,它也不会立即反映。 发送函数首先按原样返回代理的值。 一旦 Clojure 正确设置了代理的值,代理的值就会更新,我们就可以看到代理的新值。

❮ clojure_agents