Почему этот код в ruby18 и ruby19 содержит синтаксическую ошибку:
a (b.c do;end)
Я бы ожидал, что это будет означать следующее. Вызов метода a
с одним аргументом. Круглые скобки после пробела не являются круглыми скобками аргументов метода, а только обычные круглые скобки, которые вы можете поместить почти везде Аргументом является возвращаемое значение вызова метода c
для объекта b
с блоком.
Однако все перечисленное ниже интерпретируется как синтаксически правильный ruby18. Только первый из этих примеров трактуется ruby19 как синтаксически некорректный.
a (b do;end)
и
a (b.c {})
и
(b.c do;end)