【问题标题】:ruby's "any?" and "all?" methods behaviour on Empty Arrays and Hashes红宝石的“任何?”和所有?”空数组和散列的方法行为
【发布时间】:2012-11-06 11:17:48
【问题描述】:

首先,我在有关这些方法的文档中找到了两篇有用的文章:

all?:将集合的每个元素传递给给定的块。如果该块从不返回 false 或 nil,则该方法返回 true。

any?:将集合的每个元素传递给给定的块。如果该块曾经返回 false 或 nil 以外的值,则该方法返回 true。

但如果我得到的是空数组和哈希:

irb(main):004:0> [nil, "car", "bus"].all?
=> false
irb(main):005:0> ["nil", "car", "bus"].all?
=> true
irb(main):006:0> [].all?
=> true
irb(main):007:0> ["nil", "car", "bus"].any?
=> true
irb(main):008:0> [nil, "car", "bus"].any?
=> true
irb(main):009:0> [nil].any?
=> false
irb(main):010:0> [].any?
=> false

有人可以向我解释为什么空数组给我falseany? 方法的情况下和trueall? 的情况下?

【问题讨论】:

  • 在数学术语中:any? 是逻辑 OR 的折叠,其标识元素为 false。另一方面,all? 是逻辑 AND 的折叠,其标识元素是 trueen.wikipedia.org/wiki/Identity_element

标签: ruby-on-rails ruby enumeration


【解决方案1】:

如果块从不返回 false 或 nil,则该方法返回 true。

因此,既然块永远不会被调用,当然它永远不会返回 false 或 nil,因此 all 返回 true。

any 也是如此:

如果块返回的值不是 false 或 nil。

由于块永远不会被调用,它永远不会返回除 false 或 nil 之外的值,因此 any 返回 false。

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-08-10
    • 2021-10-03
    • 1970-01-01
    • 2010-12-18
    • 2013-02-23
    相关资源
    最近更新 更多