本章主要操作符的相关概念以及实现自己的操作符的方法
标识符
变量,函数和类等的名称统称为标识符。
在 Python 中,标识符都是字母和数字字符的序列,以字母或者下划线开头。
Scala 可以使用 Unicode 字符,例如如下定义都是合法的
val ** = 1
val ∮ = 2
再例如我们都知道的1->2
表达式,相当于1.->(2)
,方法名为->
。
以下面的代码为例,我们如果在自己定义的类上想直接使用+
操作符的话,可以直接定义一个名为+
的方法,而不需要像Python那样进行运算符重载。
class MyInteger(x: Int){
val number = x
def - (y: MyInteger) = number - y.number
def + (y: MyInteger) = number + y.number
// 定义一元操作符
def unary_- = -number
}
// 中置表达式
println(a.-(b))
// 等价于
println(a-b)
print(-a)
操作符优先级
那么在 Scala 中,不管是系统自带的操作符(方法)还是用户自定义的方法,优先级是如何决定的呢?
除赋值操作符以外,优先级由方法的第一个字符决定,字符优先级如下表所示(降序)。也就是说虽然*=
是由*
开头的,但是因为它是赋值操作符,所以它的优先级依然排在最后。
操作符结合性
当操作符优先级相同时,结合性决定了是从左向右求值还是从右向左求值。
在 Scala 中,除了以 冒号结尾的操作符 和 赋值操作符,所有的操作符都是左结合的。
参考资料:
《快学Scala》
《Scala编程》