为什么会这样呢?
[].all?{|a| a.include?('_')}
return true
?
[].all?{|a| a.include?('_')}
return true
?
你的代码询问以下陈述的真实性:“对于空列表中的所有元素a
,a
包含字符'_'
。”由于空列表中没有元素,这个陈述是真的。(在逻辑上被称为虚假的真实性。)如果你试图找到一个使该表达式为假的方法,可能会更容易理解。这需要在空列表中至少有一个元素,该元素没有包含'_'
。然而,空列表是空的,因此不存在这样的元素。因此,这个陈述不能有意义地为假,所以它必须是真的。
all?
会在块中从未返回false或nil时返回true。由于块从未被调用,因此它从未返回false或nil,因此all?
返回true。
甚至
[].all?{ false }
根据bcat的回答所述的原因,返回true
。