变量、函数、类等名称统称为标识符。但是和Java不一样,scala标识符可以使用任意序列的操作符字符,还可以在反引号中包含几乎任何字符序列。
a 标识符 b
这样的表达式叫做中置表达式。
只有一个参数的操作符称之为一元操作符。如果它出现在一个参数之后,那么它就是一个后置操作符。例如:
a 标识符
上述表达式等同于调用 a.标识符()
。
以下四个操作符:
+
-
!
~
称之为前置操作符,出现在参数之前,它们被转换为对名为 unary_
操作符的方法调用。
赋值操作符的名称形式为 操作符=
,以下表达式:
a 操作符= b
等价于
a = a 操作符 b
优先级由操作符的首字符决定。出现在同一行字符所产生的操作符优先级相同。
后置操作符的优先级低于中置操作符。
在scala中,所有操作符都是左结合的。
但是用于构造列表的 ::
操作符是右结合的。
在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
方法。