Почему [] .all? {| A |a.include? ('_')} вернуть true? - PullRequest
9 голосов
/ 02 ноября 2010

Почему

[].all?{|a| a.include?('_')} 

возврат true?

Ответы [ 4 ]

10 голосов
/ 02 ноября 2010

Ваш код спрашивает об истинности следующего утверждения: «Для всех элементов a в пустом списке a включает символ '_'». Поскольку в пустом списке нет элементов, утверждение верно. (В логике это называется бессмысленная правда .) Возможно, вам будет легче понять, если вы попытаетесь найти способ сделать это выражение ложным. Это потребовало бы наличия в пустом списке хотя бы одного элемента , который не содержал '_'. Однако пустой список пуст, поэтому такой элемент не может существовать. Следовательно, утверждение не может быть по сути ложным, поэтому оно должно быть правдой.

7 голосов
/ 02 ноября 2010

all? передаст каждый элемент массива в блок {|a| a.include?('_')} и вернет true, если блок не возвращает false или nil для любого из элементов.Поскольку в массиве нет элементов, блок никогда не вернет false или nil, поэтому all? вернет true.

2 голосов
/ 02 ноября 2010

all? возвращает истину, если блок никогда не возвращает ложь или ноль.Блок никогда не вызывается, поэтому он никогда не возвращает false или nil и поэтому all? возвращает true.

1 голос
/ 03 ноября 2010

Четный

[].all?{ false }

возвращает true по причинам, объясненным в ответе bcat.

...