【发布时间】:2015-08-20 21:08:18
【问题描述】:
潜伏已久,第一次发帖。
在 Scala 中,我正在寻找关于为什么首选根据类型改变运算符的优势。例如,为什么会这样:
Vector(1, 2, 3) :+ 4
确定优于:
Vector(1, 2, 3) + 4
或者:
4 +: Vector(1,2,3)
结束:
Vector(4) + Vector(1,2,3)
或者:
Vector(1,2,3) ++ Vector(4,5,6)
结束:
Vector(1,2,3) + Vector(4,5,6)
所以,这里有 :+、+: 和 ++,而单独使用 + 就足够了。我是 Scala 的新手,我会屈服的。但是,对于一种试图用其语法保持简洁的语言来说,这似乎是不必要的和混淆的。
我已经进行了很多谷歌和堆栈溢出搜索,但只发现了有关特定运算符的问题,以及一般的运算符重载。但是,没有背景说明为什么有必要将 + 拆分为多个变体。
FWIW,我可以使用隐式类重载运算符,如下所示,但我想这只会导致有经验的 Scala 程序员使用/阅读我的代码时感到困惑(和 tisk tisks)。
object AddVectorDemo {
implicit class AddVector(vector : Vector[Any]) {
def +(that : Vector[Any]) = vector ++ that
def +(that : Any) = vector :+ that
}
def main(args : Array[String]) : Unit = {
val u = Vector(1,2,3)
val v = Vector(4,5,6)
println(u + v)
println(u + v + 7)
}
}
输出:
向量(1, 2, 3, 4, 5, 6)
向量(1, 2, 3, 4, 5, 6, 7)
【问题讨论】: