定義自定義中綴運算子

在 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 而不是+