Синтаксис назначения Ruby - PullRequest
6 голосов
/ 11 февраля 2011

Глупый, синтаксический вопрос:

Если оператор присваивания действительно функция, например

def value=(x)
  @value = x
end

без пробела между левым операндом и знаком "=", тогда почему назначение может быть выполнено как test.value = x (с пробелом), но определение метода не может быть записано как:

def value = (x)
  @value = x
end

с пробелом. Это просто синтаксис, продиктованный синтаксическим анализатором?

Ответы [ 2 ]

6 голосов
/ 11 февраля 2011

def должен сопровождаться токеном для имени функции, за которым может следовать список аргументов.Скобки в списке аргументов являются необязательными (например, def value= x является подходящим определением).def value = (x) выглядит как def, за которым следуют два токена и затем список аргументов, который не анализируется.

1 голос
/ 11 февраля 2011

Это магия парсера / интерпретатора.

Когда интерпретатор видит назначение, ищет подходящий метод.

Я согласен с вами в этом отношении (почти), я думаю, что назначение должно быть some.value= x (без пробела между 'value' и '=') всегда.

Scala делает нечто подобное, но использует подчеркивание def value_= ( x: X )

...