定義自定義中綴運算子
在 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
而不是+
。