在Scala中,赋值运算符“=”是一个方法调用吗?

时间:2013-09-30 05:14:07

标签: scala

根据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中的方法调用吗?

3 个答案:

答案 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的变体,其中=和其他控制结构方法调用。