运维开发网

多线程 – 绑定和绑定之间的区别

运维开发网 https://www.qedev.com 2020-04-10 15:41 出处:网络 作者:运维开发网整理
Clojure函数绑定和with-bindings之间有什么区别?他们似乎做了完全相同的事情,但语法略有不同. 当您需要动态选择要绑定的内容时,with-bindings很有用.这是一个有趣的例子,我们随机选择要绑定的内容: user> (def ^:dynamic a) #'user/a user> (def ^:dynamic b) #'user/b user> (binding [a 1
Clojure函数绑定和with-bindings之间有什么区别?他们似乎做了完全相同的事情,但语法略有不同. 当您需要动态选择要绑定的内容时,with-bindings很有用.这是一个有趣的例子,我们随机选择要绑定的内容:

user> (def ^:dynamic a)
#'user/a
user> (def ^:dynamic b)
#'user/b
user> (binding [a 1
                b 2]
        (+ a b))
3
user> (with-bindings (if (rand-nth [true false])
                       {#'a 1
                        #'b (rand-int 10)}
                       {#'a 1
                        #'b 2})
        (+ a b))
3
user> (with-bindings (if (rand-nth [true false])
                       {#'a 1
                        #'b (rand-int 10)}
                       {#'a 1
                        #'b 2})
        (+ a b))
3
user> (with-bindings (if (rand-nth [true false])
                       {#'a 1
                        #'b (rand-int 10)}
                       {#'a 1
                        #'b 2})
        (+ a b))
1

如果你尝试使用bind,那么关于不通过文字向量作为绑定表单会感到不安.

user> (binding (if (rand-nth [true false])
                 {#'a 1
                  #'b (rand-int 10)}
                 {#'a 1
                  #'b 2})
        (+ a b))
IllegalArgumentException binding requires a vector for its binding in user:138  clojure.core/binding (core.clj:1865)
0

精彩评论

暂无评论...
验证码 换一张
取 消