Wenn Sie Strings als booleans behandeln müssen, ist read-string
eine vernünftige Wahl. Aber wenn Sie wissen, dass die Eingabe eine wohlgeformte boolean sein wird (dh entweder „true“ oder „false“), können Sie nur verwenden, verwenden Sie den Satz #{"true"}
als Funktion:
(def truthy? #{"true"})
(if (truthy? x)
...)
Oder, wenn Sie wollen eine beliebige Zeichenfolge aber „false“ als truthy zu behandeln (etwa wie Clojure Truthiness auf etwas betrachtet), können Sie (complement #{"false"})
verwenden:
(def truthy? (complement #{"false"}))
(if (truthy? x)
...)
Wenn Sie etwas so vile wie PHP schwache Typisierung Konvertierungen machen wollen, werden Sie muss die Regeln selbst schreiben.
* Nie dies tun *. Der 'Boolean'-Konstruktor ist immer ein Fehler, immer; es sollte nicht einmal existieren. Verwenden Sie stattdessen '(Boolean/valueOf x)'. – amalloy
Was meinst du, es ist immer ein Fehler? – smunk
Siehe http://docs.oracle.com/javase/6/docs/api/java/lang/Boolean.html#Boolean(boolean) für eine der vielen Erklärungen im Internet darüber, warum Sie es nicht tun sollten. Oder google nach 'java boolean constructor', um eine Diskussion zu sehen. ** edit ** Tatsächlich bedeutet das verknüpfte Javadoc, dass Speicherplatz/Geschwindigkeit der Grund sind; Du bist besser dran zu googeln und zu sehen, warum das semantisch falsch ist. – amalloy