10

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

4

3 回答 3

20

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). 我认为在这种情况下,考虑到语法糖,可以说这=是一个方法调用。

于 2013-09-30T06:24:22.297 回答
15

没有。赋值运算符 ( =) 是保留字。以下还有:

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

如需更全面的列表,请参阅第 1.1 节。有关的更多信息在中进行了=描述§ 6.12.4

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

于 2013-09-30T05:35:56.723 回答
2

虽然其他答案对于标准 Scala 是正确的,但有一个称为Scala-Virtualized的变体,其中=其他控制结构方法调用。

于 2013-09-30T09:17:58.443 回答