2016-07-29 5 views
2

In Clojure, was ist der Unterschied zwischen der true? Funktion und der boolean Funktion?Was ist der Unterschied zwischen wahr? und boolean

Ich sehe aus dem Quellcode, der eine Differenz existiert (Meta-Informationen entfernt):

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

Wahrhaftigkeit (Zwang zu booleschen Werten) ist in der offiziellen Dokumentation für [if] (http://clojure.org/reference/special_forms#if) und das spezifische Verhalten von ['true?'] (https://clojuredocs.org/clojure.core/true_q) und ['boolean'] (https://clojuredocs.org/clojure.core/boolean) sind in ClojureDocs enthalten. –

Antwort

3

Wie Sie aus dem Quellcode sehen können, true? kehrt true, wenn der Wert identisch mit true ist . boolean gibt true zurück, wenn der Wert nur truthy ist (alle Werte außer false und nil).

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

Funktion boolean ist eine Art zu Clojure die Boolesche Werte werfen true oder false. Es funktioniert nach den Regeln der Wahrheit, wie sie von if und allen ihren Nachkommen ausgeübt werden: nil und false act false; alles andere wirkt wahr.

Man könnte es definieren als

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

Funktion true? bestimmt, ob das Argument der true Clojure Wert ist. Man könnte es als

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

So definieren (boolean :whatever) ist true, während (true? :whatever)false ist.


Es gibt einige Gemeinheiten unter der Oberfläche lauert, aufgrund Java ermöglicht so neue Boolean Objekte erstellt werden. Später mehr.

Verwandte Themen