【问题标题】:Behavior of clojurescript `and` function with integers is confusingclojurescript `and` 函数与整数的行为令人困惑
【发布时间】:2014-02-04 10:13:14
【问题描述】:

可能只是在这里展示我对 lisp(s) 的无知,但我使用 ClojureScript 的 and 函数得到了一些有点奇怪的结果:

(and true false) ; false
(and false true) ; false
(and 1 0)        ; 0
(and 0 1)        ; 1 !?

这里发生了什么?我至少期望对称;这与truefalse 的位存储有关吗?

【问题讨论】:

    标签: integer boolean clojurescript


    【解决方案1】:

    and 如果所有参数都为真,则返回其最后一个参数,否则返回false(它也会在到达第一个假参数时立即停止计算参数)。在 Clojure 中,与 Javascript 不同,01 都是真值。 Clojure 中唯一的错误值是 falsenil

    http://blog.jayfields.com/2011/02/clojure-truthy-and-falsey.html

    【讨论】:

    • 这种行为的用例是什么(如果全部真实,则返回最后一件事)?
    • 类似(and arg (.getName arg)) 的东西返回名称,除非argnil。或(and (not= denominator 0) (/ numerator denominator)) 以防止被零除。
    • 顺便说一句,Javascript && 的工作方式相同。同样,Clojure or 和 Javascript || 返回第一个真值。这些运算符在大多数语言中都会进行短路,尽管有些语言只返回一个布尔值(例如 PHP 和 C),而另一些则返回最后检查的值(Javascript 和大多数类似 Lisp 的语言)。
    • 谢谢 - 现在我想起来了,在 Python 允许在语句中使用 if-else 之前,我们也是这样做的。
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2012-08-20
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多