【问题标题】:Clojure async put! return valueClojure 异步放置!返回值
【发布时间】:2015-05-01 23:17:24
【问题描述】:

Clojure async put! docs 说(强调)

异步将一个 val 放入端口,在以下情况下调用 fn0(如果提供) 完全的。不允许使用 nil 值。如果关闭会抛出。如果 随叫随到? (默认为真)为真,并且立即看跌 接受,将在调用线程上调用 fn0。 返回零。

但示例代码返回 true

user=> (put! c "XYZ")
true

文档不正确还是我遗漏了什么?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    这已在this commit 中修复,新的文档字符串为:

    “异步将 val 放入端口,调用 fn1(如果提供) 完成,通过错误的 iff 端口已经关闭。零值是 不允许。如果随叫随到? (默认为真)为真,看跌期权为 立即接受,将在调用线程上调用 fn1。退货 除非端口已经关闭,否则为 true。"

    【讨论】:

    • fn1 (the 1) 是指一个 arg 吗?
    • 不,这完全是参数的名称([port val fn1] (put! port val fn1 true)) creative 嗯?
    • 我的意思是 fn1 表示 1 arg 函数的约定?我尝试了(put! c 125 (fn [] (println "done with put"))) 并在执行take! 时得到了clojure.lang.ArityException: Wrong number of args (1) passed。但是(put! c 125 (fn [x] (println "done with put"))) 工作得很好,这让我相信它需要一个 1 arg 函数。
    • 是的,没错,它是用一个作为 put 的结果的参数调用的。像这样(if on-caller? (fn1 ret) (dispatch/run #(fn1 ret)))
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2012-12-20
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多