0

这是一个假设性的问题,但是假设我想在一个范围内改变+(或任何其他算术运算符)的行为Int,就像这样(我知道这很疯狂,我会尽量避免一般来说,但我觉得很有趣):

object MySillyStuff extends App {
  def +(a: Int, b: Int) = a*b;

  println(1+2)
}

这可能是这种方式,还是我只能通过使用新类型的隐式转换来重载运算符?(即,我必须显式创建1该新类型的成员,并2为该特定类型使用隐式转换)。

4

1 回答 1

4

请注意,scala 中没有运算符。问题+Int:的方法(1).+(2)

覆盖现有方法的唯一方法是使用override关键字继承。

隐式类允许您添加新方法,但不能覆盖已经存在的方法。

您可以使用如下值类来包装您的类而无需开销:

case class StrangeInt(val i: Int) extends AnyVal {
  def +(that: Int): StrangeInt = StrangeInt(i*that)
}

val i = StrangeInt(3)
println(i+3)
// StrangeInt(9)
于 2013-06-24T08:45:32.900 回答