在这两个测试一些代码pry
和irb
我得到的结果如下:
[1] pry(main)> a = [1, 3, 5, 7, 0] => [1, 3, 5, 7, 0] [2] pry(main)> a.any? {|obj| p obj; 3 / obj > 1} 1 => true [3] pry(main)> a.all? {|obj| p obj; 3 / obj > 1} 1 3 => false
在[2]
和[3]
我看到似乎有短路评估,尽快中止迭代,但这是保证行为?阅读文档没有提到这种行为.我意识到我可以使用inject
,因为它将迭代所有内容,但我有兴趣找出官方Ruby视图是什么.
是.
在Ruby标准的最终草案中,all?
定义如下:
each
在接收器上调用方法
对于方法each
yeilds的每个元素X :
如果给出了块,则以X为参数调用块.如果此调用返回falseish对象,则返回 false.
如果没有给出块,并且X是一个假对象,则返回 false.
回归真实.
注意步骤2中的返回字.这可以保证短路评估.any?
是类似的定义.但是标准仍然是草案,我不知道哪些Ruby实现(如果有的话)旨在符合标准.