【发布时间】:2018-08-23 06:23:49
【问题描述】:
在 Clojure 中,promise 对象实现了clojure.lang.IFn,并且使用单个参数调用承诺实现了承诺。这就是deliver 的实现方式:[source]
(defn deliver
"Delivers the supplied value to the promise, releasing any pending
derefs. A subsequent call to deliver on a promise will have no effect."
{:added "1.1"
:static true}
[promise val] (promise val))
如果(deliver x y) 只是(x y) 的间接级别,那为什么还要使用deliver?
我假设这应该以某种方式帮助消除 promise 与函数的歧义——但同样的论点可能适用于使用某些特定于 promise 的函数来读取 promise,而不是使用通用的 deref 函数。
【问题讨论】:
-
可能允许将来更改实现。
-
改写@Lee 的评论,
deliver是记录在案的公共 API,直接 fn 调用是实现。