Рубин "какой-нибудь?" и все?" поведение методов в пустых массивах и хэшах

Прежде всего, я нашел две полезные статьи в документах об этих методах:

все: передает каждый элемент коллекции в данный блок. Метод возвращает true, если блок никогда не возвращает false или nil.

any?: Пропускает каждый элемент коллекции к данному блоку. Метод возвращает true, если блок когда-либо возвращает значение, отличное от false или nil.

Но в случае пустых массивов и хэшей я получил:

irb(main):004:0> [nil, "car", "bus"].all?
=> false
irb(main):005:0> ["nil", "car", "bus"].all?
=> true
irb(main):006:0> [].all?
=> true
irb(main):007:0> ["nil", "car", "bus"].any?
=> true
irb(main):008:0> [nil, "car", "bus"].any?
=> true
irb(main):009:0> [nil].any?
=> false
irb(main):010:0> [].any?
=> false

Может кто-нибудь объяснить мне, почему пустые массивы дают мне false в случае метода any? и true в случае all??

Ответ 1

Метод возвращает true, если блок никогда не возвращает false или nil.

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

То же самое относится к any:

Метод возвращает true, если блок когда-либо возвращает значение, отличное от     false или nil.

Поскольку блок никогда не вызывается, он никогда не возвращает значение, отличное от false или nil, поэтому any возвращает false.