13

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

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?方法和true情况下给我all?吗?

4

1 回答 1

16

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

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

这同样适用于any

如果块曾经返回 false 或 nil 以外的值,则该方法返回 true。

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

于 2012-11-06T11:22:14.427 回答