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