一个愚蠢的句法问题:
如果赋值运算符实际上是一个函数,比如
def value=(x)
@value = x
end
在左侧操作数和“=”之间没有空格,那么为什么可以将赋值作为test.value = x(带空格),但方法定义不能写为:
def value = (x)
@value = x
end
有空间。这只是解析器决定的语法吗?
答案 0 :(得分:6)
def
后面必须跟一个函数名称的标记,后面跟一个参数列表。参数列表上的括号是可选的(例如,def value= x
是一个合适的定义)。 def value = (x)
看起来像def
后跟两个标记,然后是一个参数列表,它不会解析。
答案 1 :(得分:1)
那是解析器/解释器的魔力。
当解释器看到赋值查找匹配方法时。
我在这方面(差不多)同意你的意见,我认为作业总是some.value= x
('value'和'='之间没有空格)。
Scala做了类似的事情,但使用了下划线def value_= ( x: X )