Scala中函数定义中的多个等号?

时间:2015-04-18 19:33:48

标签: scala

这是一个特别不可谷歌的查询,但是当在一行中使用多个等号来定义函数时所代表的内容如下所示:

def x_=(x: Int): Unit = internal = x

1 个答案:

答案 0 :(得分:3)

隔离的那一行是scala类中getter / setter模式的setter部分。完整示例可能如下所示:

class Foo {
  private var internal: Int = 0
  def x = internal
  def x_=(x: Int): Unit = internal = x
}

def x是私有变量internal的获取者,而def x_(x: Int)是设置者。结果是,通过句法糖的魔力,x成员可以在作业的左侧使用,然后将internal设置为右侧,如下所示:

val foo = new Foo()
foo.x = 15
println(foo.x) // 15

_=(x: Int)调用赋值的语法糖,但它也可以像这样直接调用:

val foo = new Foo()
foo.x_=(15)
println(foo.x) // 15

正如您所看到的,前一个调用实际上只是后一个方法调用,下划线和括号中省略了括号。