繁体   English   中英

在Scala REPL中操作重载

[英]Operating Overloading in the Scala REPL

可能是这个问题的一个非常简单的答案,但是 - 如何使运算符超载?

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

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

scala> 1 + 2
res20: Int = 3

当然,我期待像2res20: Int = 3 我究竟做错了什么?

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

至于重载,在REPL中定义def +方法时你并没有真正重载Int (坦率地说,我很惊讶这个方法在REPL中使用this编译)。 你所要做的就是创建一个带有单个参数的+方法。 为了为Int创建一个新的重载,你需要使用pimp我的库模式 ,或者通过隐式类使用 Scala> = 2.10:

scala> implicit class PimpedInt(x: Int) {
     |   def +(i: Int, s: String): Int = {
     |     println(s)
     |     x + i
     |   }
     | }
defined class PimpedInt

scala> 1 + (1, "hello")
hello
res8: Int = 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM