0

我无法理解是什么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
4

2 回答 2

4

因为Enumerable#all?说:

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

在您的第二行中,代码返回true,因为没有集合成员是falsenil

在您的第三行代码返回true中,就像您的代码集合 (0,1) 中true的所有对象一样,就像在 Ruby 中所有对象一样,true除了niland false

在您的第一行中,代码返回false,因为集合包含false值和true值。

于 2013-10-24T11:06:54.413 回答
4

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

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

请参阅此处的文档。

于 2013-10-24T11:09:04.377 回答