Ruby Assignment语法

时间:2011-02-10 22:22:41

标签: ruby syntax language-design

一个愚蠢的句法问题:

如果赋值运算符实际上是一个函数,比如

def value=(x)
  @value = x
end

在左侧操作数和“=”之间没有空格,那么为什么可以将赋值作为test.value = x(带空格),但方法定义不能写为:

def value = (x)
  @value = x
end

有空间。这只是解析器决定的语法吗?

2 个答案:

答案 0 :(得分:6)

def后面必须跟一个函数名称的标记,后面跟一个参数列表。参数列表上的括号是可选的(例如,def value= x是一个合适的定义)。 def value = (x)看起来像def后跟两个标记,然后是一个参数列表,它不会解析。

答案 1 :(得分:1)

那是解析器/解释器的魔力。

当解释器看到赋值查找匹配方法时。

我在这方面(差不多)同意你的意见,我认为作业总是some.value= x('value'和'='之间没有空格)。

Scala做了类似的事情,但使用了下划线def value_= ( x: X )