天天看點

scala implicit class

scala 是一門 scalable 的語言,擴充性很強。 

implicit

 是 scala 的一個關鍵詞,當它被用于 class 時,該類将被認為是

implicit class

,它可以用來擴充現有類的行為和方法

以下在scala REPL中展示implicit class的作用

scala> "HAL".increment
<console>:: error: value increment is not a member of String
          "HAL".increment
scala> implicit class StringImprovement(val s:String){
     | def increment = s.map(c=>(c+).toChar)
     | }
defined class StringImproment
scala> "HAL".increment
res1: String = IBM
           

String變量是沒有

increment

方法的,是以一開始

”HAL“.increment

會報錯。 

然後我們定義了一個

implicit class StringImproment

,其中帶有一個

increment

方法,之後,String變量就帶有該方法了,而我們不需要對String類做任何修改。

Implicit class 有這樣的要求:

  • 必須定義在類或者對象或包對象(Package object)作用域内,而不能作為頂級類型。
  • 必須有一個primary constructor,并且隻能接收一個參數(可以有多個implicit的參數)

在有implicit class之前,scala是用implicit method來支援該功能的。

可以參考這篇文章