根据Scala的书“Scala编程” -
Scala is an object-oriented language in pure form: every value is an object and every operation is a method call. For example, when you say 1 + 2 in Scala, you are actually invoking a method named + defined in class Int.
从这个意义上讲,使用“=”运算符的赋值运算呢?这也是一种方法吗?似乎不太可能,因为它必须存在于所有类或一些常见的超类(例如,java.lang.Object?)中,所有类都必须从中继承它。或者是不是所有操作都是Scala中的方法调用吗?
答案 0 :(得分:18)
Jatin 答案的一点补充。有一种情况可以将=
视为方法调用,但实际上它只是一个语法糖。在Scala的OO部分,丑陋的var
生活在哪里,你可以写下以下内容:
class Test {
private var x0: Int = 0
def x = x0
def x_=(a: Int) = x0 = a
}
然后,您可以为x
scala> val t = new Test
t: Test = Test@4166d6d3
scala> t.x = 1
t.x: Int = 1
最后一行将被移至t.x_=(1)
。我认为在这种情况下,考虑到语法糖,可以说=
是方法调用。
答案 1 :(得分:15)
不。赋值运算符(=
)是保留字。以下是:
_:= => < - <:<%>:#@
有关更全面的列表,请参阅§ 1.1。有关=
的更多信息,请参见§ 6.12.4
。
所以是的,它不是方法调用。
答案 2 :(得分:2)
虽然其他答案对于标准Scala是正确的,但有一个名为Scala-Virtualized的变体,其中=
和其他控制结构是方法调用。