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

Sum*_*gam 10 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中的方法调用?

4le*_*x1v 20

Jatin答案的一点点补充.有一种情况=可以被认为是一种方法调用,但实际上它只是一种语法糖.在Scala的OO部分,丑陋var的生活在哪里,你可以写下面的内容:

class Test { 
  private var x0: Int = 0
  def x = x0
  def x_=(a: Int) = x0 = a 
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以将新的int分配给x:

scala> val t = new Test
t: Test = Test@4166d6d3

scala> t.x = 1
t.x: Int = 1
Run Code Online (Sandbox Code Playgroud)

最后一行将被淘汰t.x_=(1).我认为在这种情况下,考虑到语法糖,可以说这=是一个方法调用.


Jat*_*tin 15

不.赋值运算符(=)是保留字.以下是:

_:= => < - <:<%>:#@

有关更全面的列表,请参阅第1.1节.有关的更多信息=将在中描述§ 6.12.4.

所以是的,它不是方法调用.

  • @Sumit它不是`%`而是`<%`是类型参数中隐式视图的语法糖 (4认同)