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

时间:2012-11-06 11:17:48

标签: ruby-on-rails ruby enumeration

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

  

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

有人可以向我解释为什么空数组在false方法时为any?提供true时为all?

1 个答案:

答案 0 :(得分:16)

  

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

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

同样适用于any

  

如果块返回的值不是,则该方法返回true       假或没有。

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