Types 布尔的等价物是什么?在Clojure

Types 布尔的等价物是什么?在Clojure,types,clojure,boolean,Types,Clojure,Boolean,Scheme支持boolean?测试符号或值是否为boolean类型 (boolean? #\t) (boolean? #\f) 在Clojure中,我只能找到整数?、数字?、列表?等,但没有布尔值? 在Clojure中,boolean?的等价物是什么?您可以这样做 (defn boolean? [x] (instance? Boolean x)) 如果您在类型领域,并且想知道某个东西是否是布尔值,那么正如Shlomi所发布的那样,您可以从instance?轻松地创建boolean?函数

Scheme支持
boolean?
测试符号或值是否为boolean类型

(boolean? #\t)
(boolean? #\f)
在Clojure中,我只能找到
整数?
数字?
列表?
等,但没有
布尔值?

在Clojure中,
boolean?
的等价物是什么?

您可以这样做

(defn boolean? [x]
  (instance? Boolean x))

如果您在类型领域,并且想知道某个东西是否是布尔值,那么正如Shlomi所发布的那样,您可以从
instance?
轻松地创建
boolean?
函数。以下是varargs版本:

(defn bools? 
  [& xs]
  (every? (partial instance? Boolean) xs))
有产出:

>> (bools? true) => true
>> (bools? true false) => true
>> (bools? true nil) => false
我从来不需要这样做,因为我只处理过价值观和clojure中的所有内容都是“真实的”,除了false或nil。

  • 在Clojure中,所有的值都是逻辑的:对一个及其所有子代的第一个有效参数。从这个意义上说,一切都是布尔的
  • 唯一的假值是
    nil
    false
    本身。尽管
    Boolean/FALSE
    ,一个包含
    FALSE
    (Boolean)的静态对象。
    false)
    -一个新的
    布尔值
    对象,包含
    false
    -求值 错。最后一个与我阅读文档的方式不一致,但这是正确的 什么样的光桌给我看。我想说的是,不要构建你的 拥有
    Boolean
    s。为什么Java允许它,我无法理解
  • 我从未遇到过逻辑需要知道的情况 集合中是否有内容
    {true-false}
    。如果你需要这样做, 跟着
  • 许多标准函数产生
    nil
    ,而不产生任何结果或失败。对于 例如,应用于非成员的集合。在这种情况下,您可能会发现 您自己使用
    nil?
    测试
    nil
    ,尤其是
    false
    将是一个有效且不同的值
另一个版本:

(defn boolean? [x]
  (or (true? x) (false? x)))

(defn bool?[x](=x(boolean x))
因为在
clojure.core
中有一个谓词函数,所以请记住
true
不是唯一的真值,
false
不是唯一的假值。你可能知道。这只是对以后阅读此内容的新手的一个警告。虽然通常情况下,这样做的必要性似乎是无效的,但有一种情况是,如果要向程序输入命令行选项(如调试标志),则需要这样做。在这种情况下,编码人员希望确保用户清楚地设置了一个真值,并且没有意外地提供一些非假值。是否有一个x值可以使该函数返回假值?我想不管你给它什么,它都会变成现实。false为false,null为false,您可以为其提供的所有其他内容均为truthy。除Boolean.TRUE和Boolean.false之外的所有值均使此函数返回false。阅读真实的文档?那是假的吗?。它们正是用来区分真实性和真实的布尔值的。这很好,也适用于Clojurescript(我刚刚在cljs和clj REPLs中进行了测试)。