Этот код работает как ожидалось (ничего не делает, даже не вызывает предупреждения/ошибки):
l = lambda {|i|}
l.call(1)
Этот код выдает предупреждение (предупреждение: несколько значений для параметра блока (0 для 1)):
l = lambda {|i|}
l.call
И этот код выходит из строя с ошибкой (ArgumentError: неправильное количество аргументов (0 для 2)):
l = lambda {|i, y|}
l.call
Я думал, что лямбда требует передачи всех аргументов.
И со второго примера я вижу, что это не так. Почему он работает, когда задан только один аргумент и работает как ожидалось (с ошибкой с ошибкой) с более чем одним аргументом?
PS: ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
UPDATE: Я проверил эти образцы с ruby 1.9.1p376. И он работает так, как ожидалось - второй пример также вызывает ошибку. Похоже, что это функция версии 1.8 (или = 1.8)