Я узнал от Гекла, что
[1, 2, 3].each(&nil)
не вызывает никаких ошибок - он просто возвращает перечислитель.
TypeError: wrong argument type String (expected Proc)
Кроме того, &nil
вызывает block_given?вернуть false
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
имеет специальное поведение, не разделяемое другими объектами?