Почему `a (bc do; end)` не является синтаксически правильной программой Ruby? - PullRequest
3 голосов
/ 04 января 2012

Почему этот код в ruby18 и ruby19 содержит синтаксическую ошибку:

a (b.c do;end)

Я бы ожидал, что это будет означать следующее. Вызов метода a с одним аргументом. Круглые скобки после пробела не являются круглыми скобками аргументов метода, а только обычные круглые скобки, которые вы можете поместить почти везде Аргументом является возвращаемое значение вызова метода c для объекта b с блоком.

Однако все перечисленное ниже интерпретируется как синтаксически правильный ruby18. Только первый из этих примеров трактуется ruby19 как синтаксически некорректный.

a (b do;end)

и

a (b.c {})

и

(b.c do;end)

1 Ответ

0 голосов
/ 04 января 2012

Удалить пробел между именем метода и (.Руби обычно предупреждала, что это было изворотливо, и в некоторых случаях кажется, что рубин 1.9 сбрасывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...