这是一个假设的问题,但是我想说我想改变范围内+
Int
(或任何其他算术运算符)的行为,就像这样(我知道)它是疯狂的东西,我总是试图避免,但我发现它很有趣):
object MySillyStuff extends App {
def +(a: Int, b: Int) = a*b;
println(1+2)
}
这是可能的,或者我只能通过新类型的隐式转换来重载运算符? (即,我必须明确地创建1
作为该新类型的成员,并对该特定类型使用2
的隐式转换。)
答案 0 :(得分:4)
请注意,scala中没有运算符。问题+
是Int
的方法:(1).+(2)
。
覆盖现有方法的唯一方法是使用override
关键字继承。
隐式类允许您添加新方法,但不能覆盖已存在的方法。
您可以使用value classes这样包装您的课程,而不是开销:
case class StrangeInt(val i: Int) extends AnyVal {
def +(that: Int): StrangeInt = StrangeInt(i*that)
}
val i = StrangeInt(3)
println(i+3)
// StrangeInt(9)