Проблема в том, что & также является унарным оператором, который имеет приоритет.
Когда вы делаете это:
@entries.any?&:submitted?
Вы на самом деле делаете это:
(@entries.any?)&(:submitted?)
Что приводит к истине. Так как в @entries есть записи и символ: представлены? имеет истинное значение истины.
Когда вы делаете это:
@entries.any? &:submitted?
Что вы на самом деле делаете, это:
@entries.any?(&:submitted?)
Что вы действительно хотите.
Причина, по которой @pilcrow заставил его работать, заключается в том, что он / она использовал следующий класс:
class Entry
def submitted?
true
end
end
Чтобы воспроизвести результат, используйте следующий класс:
class Entry
def submitted?
false
end
end
P.S: То же самое с примером @ fl00r:
[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil?
[1,2, ноль] .any? приводит к истине и: ноль? имеет истинное значение true, поэтому результаты совпадают, так как [1,2, nil] также содержит нулевое значение, но вычисления отличаются.