【发布时间】:2016-07-29 07:53:38
【问题描述】:
在 Clojure 中,true? 函数和 boolean 函数有什么区别?
我从源代码中看到确实存在差异(元信息已删除):
(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))
【问题讨论】:
标签: clojure
在 Clojure 中,true? 函数和 boolean 函数有什么区别?
我从源代码中看到确实存在差异(元信息已删除):
(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))
【问题讨论】:
标签: clojure
从源代码中可以看出,true? 如果值与true 相同,则返回true。如果值仅仅是truthy(除false 和nil 之外的所有值),boolean 将返回true。
=> (map true? [true 0 1 :a])
(true false false false)
=> (map boolean [true 0 1 :a])
(true true true true)
【讨论】:
函数boolean 是转换为Clojure 的布尔值true 或false 的类型。它根据if 及其所有后代所执行的真实性规则工作:nil 和false 是假的;其他一切都是真实的。
你可以定义为
(defn boolean [x]
(case x
(nil false) false
true))
函数true? 确定参数是否是Clojure 值true。您可以将其定义为
(defn true? [x] (identical? true x))
因此(boolean :whatever) 是true,而(true? :whatever) 是false。
由于 Java 允许新的
Boolean 要创建的对象。以后再说。
【讨论】: