2016-07-29 9 views
2

Clojureでは、true?関数とboolean関数の違いは何ですか?真の違いは何ですか?ブール

Iは、(メタ情報が削除)差が存在するソースコードから参照:

(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同一ある場合。 booleanは、値が真偽falseおよびnilを除くすべての値)の場合はtrueを返します。

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

機能booleanはClojureののブール値trueまたはfalseにキャストタイプです。それはifとその子孫すべてによって実行されるような真実の規則に従って動作します:nilfalseは偽です。他のすべては真実です。あなたは

(defn boolean [x] 
    (case x 
    (nil false) false 
    true)) 

機能true?としてそれを定義することができ

は、引数がClojureの値trueであるか否かを判断します。あなたは(true? :whatever)falseであるのに対し、(boolean :whatever)したがって

(defn true? [x] (identical? true x)) 

としては、 trueであることを定義することができます。


新しい Booleanオブジェクトを作成できるようにするJavaによる表面の下に潜んでいるいくつかの不快があります。もっと後で。

関連する問題