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