Как FOO (& NIL) ведет себя по-разному, чем Foo (& «не пробо»)?

Я выяснил из 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 имеет особое поведение, не разделяемое другими объектами?

7
задан Andrew Grimm 14 September 2011 в 02:51
поделиться