红宝石的"任何?" 和所有?" 空数组和哈希值的方法行为

y4r*_*lav 13 ruby enumeration ruby-on-rails

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

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
Run Code Online (Sandbox Code Playgroud)

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

Kim*_*bel 16

如果块永远不返回false或nil,则该方法返回true.

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

同样适用于any:

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

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