Scheme支持boolean?
来测试符号或值是否为布尔类型。
(boolean? #\t)
(boolean? #\f)
在Clojure中,我只能找到integer?
,number?
,list?
等,但没有boolean?
。
Clojure中boolean?
的等价物是什么?
答案 0 :(得分:10)
你可以做到
(defn boolean? [x]
(instance? Boolean x))
答案 1 :(得分:8)
又一个版本:
(defn boolean? [x]
(or (true? x) (false? x)))
答案 2 :(得分:4)
if
form及其所有后代的有效第一个参数。从这个意义上讲,一切都是布尔值。 nil
和false
本身。虽然Boolean/FALSE
,包含false
的静态对象和(Boolean.
false)
- 包含Boolean
的新false
对象 - 评估
假。这最后一点不符合我阅读文档的方式,但那是
Light Table向我展示了什么。我说要避免构建你的
拥有Boolean
个。为什么Java允许它,我无法理解。 #{true false}
中。如果你需要这样做,
关注Shlomi's advice。 nil
。对于
例如,应用于非成员的集合。在这种情况下,你可能会发现
您自己使用nil?
来测试nil
,尤其是false
将是一个有效和独特的价值。答案 3 :(得分:3)
自Clojure 1.9以来clojure.core
中有boolean?
谓词函数。
答案 4 :(得分:1)
如果你在类型的土地上,并想知道某些东西是否是布尔值,那么就像Shlomi发布的那样,你可以从boolean?
轻松地创建一个instance?
函数。这是一个varargs版本:
(defn bools?
[& xs]
(every? (partial instance? Boolean) xs))
带输出:
>> (bools? true) => true
>> (bools? true false) => true
>> (bools? true nil) => false
我从来不需要这样做,因为我只处理过价值观以及clojure中的所有内容都是“真实的”除了假或零之外的事实。
答案 5 :(得分:1)
(defn bool? [x] (= x (boolean x)))