我无法理解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
答案 0 :(得分:4)
因为Enumerable#all?
说:
如果没有给出块,Ruby会添加一个{| obj |的隐式块obj}哪个会导致所有?当没有任何集合成员为false或nil时返回true。
在第二行中,代码返回true
,因为所有收藏成员都不是false
或nil
在第三行代码中返回true
,因为代码集合中的所有对象(0,1)都是true
,因为在Ruby中,所有对象都是true
,除了nil
}和false
。
在第一行中,代码返回false
,因为该集合包含false
个值以及true
值。
答案 1 :(得分:4)
这是一个ruby方法,定义如下:
将集合的每个元素传递给给定的块。如果块永远不返回false或nil,则该方法返回true。如果没有给出块,Ruby会添加一个{| obj |的隐式块obj}哪个会导致所有?当没有任何集合成员为false或nil时返回true。
请参阅文档here。