定义自定义中缀运算符
在 Scala 运算符(如+
,-
,*
,++
等)中只是方法。例如,1 + 2
可以写成 1.+(2)
。这些方法称为 中缀运算符 。
这意味着可以在你自己的类型上定义自定义方法,重用这些运算符:
class Matrix(rows: Int, cols: Int, val data: Seq[Seq[Int]]){
def +(that: Matrix) = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) + that.data(r)(c)
new Matrix(rows, cols, newData)
}
}
这些运算符定义为方法可以像这样使用:
val a = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
val b = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
// could also be written a.+(b)
val sum = a + b
请注意,中缀运算符只能有一个参数; 操作符之前的对象将在操作符之后在对象上调用它自己的操作符。任何带有单个参数的 Scala 方法都可以用作中缀运算符。
这应该与 parcimony 一起使用。只有当你自己的方法完全符合人们对该运算符的期望时,它通常被认为是一种良好的做法。如有疑问,请使用更保守的命名,例如
add
而不是+
。