Почему этот код работает в ruby ​​1.8, а не в ruby ​​1.9?

Этот кусок кода:

def func *; end
[func "hello"]

анализируется без ошибок в Ruby 1.8.7, но возвращает синтаксическую ошибку:

syntax error, unexpected ']', expecting '}'

в Ruby >= 1,9. Я просмотрел разницу между Ruby 1.8 и Ruby 1.9, но не смог найти ссылку на это. Кто-нибудь знает, какие изменения вызывают это?

1 ответ

Решение

Это чтобы избежать двусмысленности. Учтите следующее:

def foo(a, b = 1) # foo takes an optional second argument
end

[foo 1, 2]

Это можно интерпретировать как [(foo 1), 2] или как [(foo 1, 2)],

В документации по методам вызова есть две ссылки (хотя они не связаны напрямую с литералом массива):

Обратите внимание, что круглые скобки являются необязательными... За исключением случаев, когда есть разница между использованием и пропуском круглых скобок

Во многих случаях скобки не нужны при отправке сообщения... Однако скобки необходимы, чтобы избежать двусмысленности.

Другие вопросы по тегам