在Clojure中,true?
函數和boolean
函數有什麼區別?true是什麼區別?和布爾值
我從一個差確實存在的源代碼中看到(已刪除的元信息):
(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))
在Clojure中,true?
函數和boolean
函數有什麼區別?true是什麼區別?和布爾值
我從一個差確實存在的源代碼中看到(已刪除的元信息):
(defn boolean [x] (clojure.lang.RT/booleanCast x))
(defn true? [x] (clojure.lang.Util/identical x true))
正如你可以從源代碼看,true?
返回true
如果值相同true
。如果數值僅爲truthy(除false
和nil
之外的所有數值),則返回返回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
對象。更晚。
['if'](http://clojure.org/reference/special_forms#if)的官方文檔中包含了真值(強制爲布爾值),['true?']( https://clojuredocs.org/clojure.core/true_q)和['boolean'](https://clojuredocs.org/clojure.core/boolean)在ClojureDocs上覆蓋。 –