首先,我在关于这些方法的文档中找到了两篇有用的文章:
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?
?
答案 0 :(得分:16)
如果块永远不返回false或nil,则该方法返回true。
因为块永远不会被调用,当然它永远不会返回false或nil,因此all
返回true。
同样适用于any
:
如果块返回的值不是,则该方法返回true 假或没有。
由于块永远不会被调用,它永远不会返回false或nil以外的值,因此any
返回false。