'。所有?'方法的奇怪行为

时间:2013-10-24 11:03:52

标签: ruby

我无法理解all?的作用。在以下代码中,前两行是相同的。为什么输出不同?它是一个错误还是默认行为?

[false, false, true, true, true, true, false, false, true, true].all? # => false
[true, true, true, true, true, true, true, true, true, true].all? # => true
[0, 0, 1, 1, 1, 1, 0, 0, 1, 1].all? # => true

2 个答案:

答案 0 :(得分:4)

因为Enumerable#all?说:

  

如果没有给出块,Ruby会添加一个{| obj |的隐式块obj}哪个会导致所有?当没有任何集合成员为false或nil时返回true。

在第二行中,代码返回true,因为所有收藏成员都不是falsenil

在第三行代码中返回true,因为代码集合中的所有对象(0,1)都是true,因为在Ruby中,所有对象都是true,除了nil }和false

在第一行中,代码返回false,因为该集合包含false个值以及true值。

答案 1 :(得分:4)

这是一个ruby方法,定义如下:

  

将集合的每个元素传递给给定的块。如果块永远不返回false或nil,则该方法返回true。如果没有给出块,Ruby会添加一个{| obj |的隐式块obj}哪个会导致所有?当没有任何集合成员为false或nil时返回true。

请参阅文档here