2016-07-29 130 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對象。更晚。

相關問題