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來支援該功能的。
可以參考這篇文章