在Clojure中,true?
函数和boolean
函数之间有什么区别?
我从源代码中看到存在差异(删除了元信息):
(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))
答案 0 :(得分:3)
正如您从源代码中看到的,如果值与true?
相同,则true
会返回true
。如果值仅为 truthy ,则boolean
会返回true
(除false
和nil
以外的所有值)。
=> (map true? [true 0 1 :a])
(true false false false)
=> (map boolean [true 0 1 :a])
(true true true true)
答案 1 :(得分:1)
函数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
。
Boolean
个对象。更晚些时候。