Я выяснил из HECKLE, что
[1, 2, 3].each(&nil)
не вызывает никаких ошибок - это просто возвращает перечислитель Отказ
Напротив,
[1, 2, 3].each(&"")
повышает
TypeError: wrong argument type String (expected Proc)
также & Nil
Причины Block_Given? Чтобы вернуть ложь
def block_given_tester
if block_given?
puts "Block given"
else
puts "Block not given"
end
end
block_given_tester(&nil) # => Block not given
Это не потому, что Nilclass
реализуется TO_Proc
- я проверил RDOC.
Я могу понять Почему было бы приятно иметь & Nil
, но я не уверен Как Это сделано. Это только один из способов Nil
имеет особое поведение, не разделяемое другими объектами?