Почему этот код работает в 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)]
,
В документации по методам вызова есть две ссылки (хотя они не связаны напрямую с литералом массива):
Обратите внимание, что круглые скобки являются необязательными... За исключением случаев, когда есть разница между использованием и пропуском круглых скобок
Во многих случаях скобки не нужны при отправке сообщения... Однако скобки необходимы, чтобы избежать двусмысленности.