2016-07-29 102 views
2

在Clojure中,true?函数和boolean函数有什么区别?true是什么区别?和布尔值

我从一个差确实存在的源代码中看到(已删除的元信息):

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

['if'](http://clojure.org/reference/special_forms#if)的官方文档中包含了真值(强制为布尔值),['true?']( https://clojuredocs.org/clojure.core/true_q)和['boolean'](https://clojuredocs.org/clojure.core/boolean)在ClojureDocs上覆盖。 –

回答

3

正如你可以从源代码看,true?返回true如果值相同true 。如果数值仅为truthy(除falsenil之外的所有数值),则返回返回true

=> (map true? [true 0 1 :a]) 
(true false false false) 
=> (map boolean [true 0 1 :a]) 
(true true true true) 
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对象。更晚。

相关问题