是否可以在 Scala 中直接重载运算符 += ?它可能对某些复杂类型有用,其中 a += b 可能比 a = a + b 具有更有效和更简单的实现。
我最近遇到的案例是我Vector3f
从 jMonkeyEngine (com.jme.math) 提供算子。一个自然的实现可能如下所示:
import com.jme3.math.{Matrix3f, Vector3f}
object JMEMathOperators {
implicit class Vector3fMath(val a: Vector3f) extends AnyVal {
def - (b: Vector3f) = a subtract b
def + (b: Vector3f) = a add b
def * (b: Vector3f) = a mult b
def * (b: Float) = a mult b
def += (b: Vector3f) = a addLocal b
}
}
尽管没有编译错误,但我的+=
实现从未被调用。在这种情况下,差异并不那么重要,addLocal
效率仅略好于add
,但可以想象存在一些复杂的类,其中差异可能很重要。