代码之家  ›  专栏  ›  技术社区  ›  DaoWen

为什么Clojure具有承诺交付功能?

  •  2
  • DaoWen  · 技术社区  · 8 年前

    在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) ,为什么使用 完全?

    deref 功能。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Arthur Ulfeldt    8 年前

    让这样的代码看起来漂亮是语法上的甜头:

    (-> url
        download
        extract-value
        (deliver consumer)
    

    deliver函数的行为用于确保,如果您在第二个调用它的调用方处抛出异常。它在2011年被改变了,现在后面的电话都被忽略了。

    如果作为一个函数调用Promises,它总是有相同的行为;如果从deliver调用Promises,那么这个函数deliver只会让一些看起来有点不同的东西变得有点不同。这些天,我还是会用它来和我未来的自己交流

        2
  •  1
  •   cfrick    8 年前

    deref (f x) 如果你还不知道发生了什么 f deliver 给你更多的背景。

    推荐文章