第十一章 操作符

标识符

变量、函数、类等名称统称为标识符。但是和Java不一样,scala标识符可以使用任意序列的操作符字符,还可以在反引号中包含几乎任何字符序列。

中置操作符

a 标识符  b

这样的表达式叫做中置表达式。

一元操作符

只有一个参数的操作符称之为一元操作符。如果它出现在一个参数之后,那么它就是一个后置操作符。例如:

a 标识符

上述表达式等同于调用 a.标识符()

以下四个操作符:

  • +
  • -
  • !
  • ~

称之为前置操作符,出现在参数之前,它们被转换为对名为 unary_ 操作符的方法调用。

赋值操作符

赋值操作符的名称形式为 操作符= ,以下表达式:

a 操作符= b

等价于

a = a 操作符 b

优先级

优先级由操作符的首字符决定。出现在同一行字符所产生的操作符优先级相同。

后置操作符的优先级低于中置操作符。

结合性

在scala中,所有操作符都是左结合的。

但是用于构造列表的 :: 操作符是右结合的。

apply和update方法

在scala中以下函数调用语法:

f(arg1, arg2,...)

等价于:

f.apply(arg1, arg2,...)

而以下语法:

f(arg1, arg2,...) = value

等价于

f.update(arg1, arg2, ..., value)

apply 方法也经常用于伴生对象中,用来构造对象而不是显示使用 new 方法。

提取器

提取器就是一个带有 unapply 方法的对象,可以将 unapply 方法看做 apply 方法的逆向操作。

apply 方法接收构造参数,然后将它们转换成对象,而 unapply 方法接收一个对象,然后从中提取值。

unapply 方法返回一个 Option ,它包含一个元组,每个匹配的变量各有一个值与之相对应。

每个样式类都自动具备 apply 方法和 unapply 方法。