簡體   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