在Scala REPL中操作重载

时间:2016-07-03 13:23:13

标签: scala operator-overloading

这可能是一个非常简单的答案,但是 - 如何重载操作符?

显而易见的解决方案似乎失败了,尽管我可能误解了出了什么问题:

scala> def +(s:Int): Int = {print (s); this + s}
$plus: (s: Int)Int

scala> 1 + 2
res20: Int = 3

当然,我期待2res20: Int = 3之类的东西。我做错了什么?

1 个答案:

答案 0 :(得分:3)

在Scala中,所有运算符都是方法。为了覆盖现有方法(因为Int已经定义了+方法),唯一的方法是继承override +方法,然后你' d需要对派生类型进行操作。

至于重载,在REPL中定义Int方法时,你并没有真正超载def +(坦率地说,我很惊讶这个方法使用{{1}编译在REPL中)。您所做的只是创建一个this方法,它只需要一个参数。要为+创建新的重载,您需要使用pimp my library pattern,或者通过implicit class使用Scala> = 2.10:

Int