any?
method只是通过Enumerable
实现'或'的逻辑功能。它可以被解释为声明:
Y = X1 V; X2 V X3配... v XN
而且all?
method实现了对在Enumerable
'和' 的逻辑功能。它也可以被解释为声明:
Y = X1 * X2 * X3 * ... * XN
由于Array
是Enumerable
,它包含的方法也。因此,对于方法any?
,true
(正好既不是nil
也不是false
)的结果与true
结果中断枚举结果。在例子中,产生成为上的数字真正,所以方法打破了执行的回报true
:
[1,2,3,4,5].any? {| x | puts x ; x > 3 }
# 1
# 2
# 3
# 4
# => true
你也可以申请DeMorgan's rule的功能any?
,并使用all?
方法:
[1,2,3,4,5].all? {| x | puts x ; x <= 3 }
# 1
# 2
# 3
# 4
# => true
对于方法all?
false
或的首次出现结果做类似的事情,即返回false
。在例子中,产生成为上数 假,所以方法打破了执行的回报false
:
[1,2,3,4,5].all? {| x | puts x ; x < 3 }
# 1
# 2
# 3
# => false
而且随着DeMorgan's transformation使用any?
方法:
![1,2,3,4,5].any? {| x | puts x ; x >= 3 }
# 1
# 2
# 3
# => false
“garanteed”是什么意思?在[2]中,当它发现任何一个时,它停止评估,即> 1。我没有看到任何理由为什么它应该更进一步。对于[3]也是如此,当它发现任何错误时,它就停止。有很多其他的方法来评估对象的整个句子... –
我的意思是说,因为数组中有一个零,如果我使用'注入'我得到一个'ZeroDivisionError',但会符合Ruby实现(假设有一个规范要符合!)总是在尽可能早的时候停下来,而不要试图用零来除? –
我相信它甚至没有定义'any?'或'all?'从头到尾遍历数组。为了保存在Ruby版本中,你不能做出这样的假设。对于一个单一的ruby版本来说可能是好的。 – tessi