なぜ
[].all?{|a| a.include?('_')}
戻るtrue
?
あなたのコードは、次のステートメントの真偽について尋ねa
ます。空のリストには要素がないため、ステートメントは true です。(これは論理的に空虚な真実と呼ばれます。)代わりにその式を偽にする方法を見つけようとすると理解しやすいかもしれません。これには、 を含まない空のリストに少なくとも 1 つの要素が必要です。ただし、空のリストは空であるため、そのような要素は存在できません。したがって、ステートメントが意味のある偽になることはあり得ないため、真でなければなりません。a
'_'
'_'
all?
配列のすべての要素をブロックに渡し、ブロックが{|a| a.include?('_')}
返されtrue
ない場合、false
またはnil
いずれかの要素に対して返されます。配列には要素がないため、ブロックはfalse
ornil
を返さず、 so をall?
返しますtrue
。
all?
ブロックが false または nil を返さない場合は true を返します。ブロックは呼び出されないため、false または nil を返すことはなく、したがってall?
true を返します。
平
[].all?{ false }
true
bcat の回答で説明されている理由により、 を返します。