这可能是一个非常简单的答案,但是 - 如何重载操作符?
显而易见的解决方案似乎失败了,尽管我可能误解了出了什么问题:
scala> def +(s:Int): Int = {print (s); this + s}
$plus: (s: Int)Int
scala> 1 + 2
res20: Int = 3
当然,我期待2res20: Int = 3
之类的东西。我做错了什么?
答案 0 :(得分:3)
在Scala中,所有运算符都是方法。为了覆盖现有方法(因为Int
已经定义了+
方法),唯一的方法是继承override
+
方法,然后你' d需要对派生类型进行操作。
至于重载,在REPL中定义Int
方法时,你并没有真正超载def +
(坦率地说,我很惊讶这个方法使用{{1}编译在REPL中)。您所做的只是创建一个this
方法,它只需要一个参数。要为+
创建新的重载,您需要使用pimp my library pattern,或者通过implicit class使用Scala> = 2.10:
Int