在Scala中,操作符也是方法。任何带有单个参数的方法可以作为_中缀操作符_来使用。例如:+
可以用点表达式来调用:
1 | 10.+(1) |
然而,使用中缀操作符更加便于阅读:
1 | 10 + 1 |
定义和使用操作符
你可以使用任何合法的标识符来作为操作符。这包括名称(如add
)以及符号(如+
)。
1 | case class Vec(val x: Double, val y: Double) { |
Vec
类有一个方法+
用于将vector
和vector2
相加。通过圆括号,你可以用易读的语法来构建复杂的表达式。这里定义了类MyBool
,其中包括方法and
和or
:
1 | case class MyBool(x: Boolean) { |
现在可以使用and
和or
来作为中缀操作符了:
1 | def not(x: MyBool) = x.negate |
这有助于让xor
的定义更加可读。
优先级
当一个表达式使用了多个操作符,它们会基于第一个字符的优先级进行评估:
1 | (characters not shown below) |
以上优先级会应用到你定义的函数当中去。例如,下面的表达式:
1 | a + b ^? c ?^ d less a ==> b | c |
相当于
1 | ((a + b) ^? (c ?^ d)) less ((a ==> b) | c) |
由于?^
以字符?
开头所以具有最高优先级,+
具有第二优先级,接着是==>
、^?
、|
和less
。