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)

我们正在查看递增计数器值的相同示例,但是从以下输出可以清楚地了解 send-off 函数的作用。

输出

上述程序产生以下输出。

0
0
0

可以看出,即使我们已经向代理发送了一个将值设置为 100 的函数,它也不会立即反映出来。send-off 函数首先返回代理的当前值。一旦 Clojure 正确设置了代理的值,代理的值就会被更新,我们就可以看到代理的新值。

clojure_agents
广告