Clojure - 代理


正如多次指出的那样,Clojure 是一种编程语言,其中许多数据类型都是不可变的,这意味着更改变量值的唯一方法是创建一个新变量并向其分配新值。然而,Clojure 确实提供了一些可以创建可变状态的元素。我们已经看到这可以通过Atomics数据类型来实现。实现这一目标的另一种方法是通过代理。

代理提供各个位置的独立、异步更改。代理在其生命周期内绑定到单个存储位置,并且只允许该位置因操作而发生突变(到新状态)。操作是异步应用于代理状态的函数(带有可选的附加参数),其返回值成为代理的新状态。

在 Clojure 中可以对代理进行以下操作。

先生。 操作及说明
1 代理人

代理是通过使用agent命令创建的。

2 发送

此函数用于将值发送给代理。

3 关闭代理

此功能用于关闭任何正在运行的代理。

4 送行

在某些情况下,代理被分配了本质上是阻塞的功能。

5 等待

由于更新代理值时存在延迟,Clojure 提供了“await-for”函数,用于指定等待代理更新的时间(以毫秒为单位)。

6 等待

阻塞当前线程(无限期!),直到迄今为止从该线程或代理分派到代理的所有操作都已发生。将阻止失败的代理。

7 代理错误

如果代理失败,则返回代理异步操作期间引发的异常。如果代理没有失败则返回 nil。