为什么 [].all?{|a| a.include?('_')} 返回 true?

9
为什么会这样呢?
[].all?{|a| a.include?('_')} 

return true?


4个回答

10

你的代码询问以下陈述的真实性:“对于空列表中的所有元素aa包含字符'_'。”由于空列表中没有元素,这个陈述是真的。(在逻辑上被称为虚假的真实性。)如果你试图找到一个使该表达式为假的方法,可能会更容易理解。这需要在空列表中至少有一个元素,该元素没有包含'_'。然而,空列表是空的,因此不存在这样的元素。因此,这个陈述不能有意义地为假,所以它必须是真的。


1
唯一的回答者,不扮演明显的队长角色。 - Nakilon

7
< p > < code > all? 会将数组的每个元素传递给块 < code > {|a| a.include?('_')} ,如果该块对任何元素不返回 < code > false 或 < code > nil ,则返回 < code > true 。由于数组没有元素,因此该块永远不会返回 < code > false 或 < code > nil ,所以 < code > all? 返回 < code > true 。 < /p >

2

all?会在块中从未返回false或nil时返回true。由于块从未被调用,因此它从未返回false或nil,因此all?返回true。


1

甚至

[].all?{ false }

根据bcat的回答所述的原因,返回true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接