真有什么区别?和布尔

时间:2016-07-29 07:53:39

标签: clojure

在Clojure中,true?函数和boolean函数之间有什么区别?

我从源代码中看到存在差异(删除了元信息):

(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))

2 个答案:

答案 0 :(得分:3)

正如您从源代码中看到的,如果值true? 相同,则true会返回true。如果值仅为 truthy ,则boolean会返回true(除falsenil以外的所有值)。

=> (map true? [true 0 1 :a])
(true false false false)
=> (map boolean [true 0 1 :a])
(true true true true)

答案 1 :(得分:1)

函数boolean是对Clojure的布尔值truefalse的类型转换。它按照if及其所有后代所执行的真实性规则运作:nilfalse行为是假的;其他一切都是真的。

您可以将其定义为

(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个对象。更晚些时候。