这是一个假设性的问题,但是假设我想在一个范围内改变+(或任何其他算术运算符)的行为Int,就像这样(我知道这很疯狂,我会尽量避免一般来说,但我觉得很有趣):
object MySillyStuff extends App {
def +(a: Int, b: Int) = a*b;
println(1+2)
}
这可能是这种方式,还是我只能通过使用新类型的隐式转换来重载运算符?(即,我必须显式创建1该新类型的成员,并2为该特定类型使用隐式转换)。
这是一个假设性的问题,但是假设我想在一个范围内改变+(或任何其他算术运算符)的行为Int,就像这样(我知道这很疯狂,我会尽量避免一般来说,但我觉得很有趣):
object MySillyStuff extends App {
def +(a: Int, b: Int) = a*b;
println(1+2)
}
这可能是这种方式,还是我只能通过使用新类型的隐式转换来重载运算符?(即,我必须显式创建1该新类型的成员,并2为该特定类型使用隐式转换)。
请注意,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)