【问题标题】:What is the difference between true? and boolean真实和真实有什么区别?和布尔值
【发布时间】:2016-07-29 07:53:38
【问题描述】:

在 Clojure 中,true? 函数和 boolean 函数有什么区别?

我从源代码中看到确实存在差异(元信息已删除):

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

【问题讨论】:

  • Truthiness(强制转换为布尔值)在 if 的官方文档中有介绍,true?boolean 的具体行为在 ClojureDocs 中有介绍。

标签: clojure


【解决方案1】:

从源代码中可以看出,true? 如果值true 相同,则返回true。如果值仅仅是truthy(除falsenil 之外的所有值),boolean 将返回true

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

【讨论】:

    【解决方案2】:

    函数boolean 是转换为Clojure 的布尔值truefalse 的类型。它根据if 及其所有后代所执行的真实性规则工作:nilfalse 是假的;其他一切都是真实的。

    你可以定义为

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

    函数true? 确定参数是否是Clojure 值true。您可以将其定义为

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

    因此(boolean :whatever)true,而(true? :whatever)false


    由于 Java 允许新的 Boolean 要创建的对象。以后再说。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2013-04-26
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2010-11-20
      • 2023-04-10
      • 1970-01-01
      • 2012-11-27
      相关资源
      最近更新 更多