Scala隱式轉換

2021-09-01 15:48:54 字數 4375 閱讀 2316

隱式轉換是scala的強大特性之一,使得靜態型別動態化,可以動態為現有類庫新增定製化的功能。

隱式轉換分四種

隱式轉換的規則

如果**無需隱式轉換即可通過編譯,則不會引入隱式轉換,即便引入了也不會起作用(idea中顯示為灰色);

不可存在二義性,如存在兩個相同型別的隱式值時編譯會報錯

隱式操作不能巢狀使用(如 convert1(convert1(x)) ),即隱式轉換從源型別到目標型別只會經過一次轉換,不能經過多次隱式轉換達到目標;

作用域原則,只在當前引入隱式轉換的作用域內才起作用

使用方式:將對應的函式、類、引數、值標記為implicit

作用:增強乙個類,新增本不存在的方法函式

格式:隱式函式

implicitdef函式名(引數):返回值型別=

例1:隱式函式例1

packagelzr.implicittest

/**

* created by lizhirong on 2018/8/28.

*/

//mathematics僅僅提供add函式

classmathematics

}

//下面是增強mathematics類,新增乙個subtract方法

classrichmathematics(valmathematics:mathematics)

}

objectimplicitfunctiontest

//  implicit def mathematicstorichmathematics2(mathematics: mathematics) =

defmain(args:array[string])

}

隱式轉換函式的規則:

在scala2.10後提供了隱式類,可以使用implicit宣告類,相對於隱式函式更容易理解,**更直觀易懂

作用:增強對應的類

格式:隱式轉換

implicitclass類名(引數)

例2:隱式轉換

packagelzr.implicittest

/**

* created by lizhirong on 2018/8/28.

*/

//mathematics僅僅提供add函式

classmathematics2

}

objectimplicitclasstest

//下面是隱式類的方式,給mathematics類新增乙個subtract方法

implicitclassrichmathematics(valmathematics:mathematics2)

}

}

隱式類的規則

格式:隱式轉換

def函式名(implicit引數名:型別):返回值=

例3:隱式轉換

packagelzr.implicittest

/**

* created by lizhirong on 2018/8/28.

*/

classmathematics3

//  def add2(implicit x: int)(y: int): int =

defadd(x:int)(implicity:int=0):int=

defpower(implicity:int):int=

}

objectimplicitparamtest

}

隱式引數的規則:

隱式引數要麼指定全部引數,要麼使用柯里化(柯里化時只能最後乙個柯里化內的引數(可多個)使用隱式implicit)

implicit關鍵字在作用域內只能出現一次

匿名函式不能使用隱式引數

格式:隱式轉換

implicitval變數名:型別=

例4:隱式轉換

packagelzr.implicittest

/**

* created by lizhirong on 2018/8/28.

*/

objectimplicitvaluetest

defpower(x:int)(implicity:double):double=

defmain(args:array[string])

}

隱式值的規則:

相同型別的隱式值只能有乙個

scala 隱式轉換

defdisplay input string unit println input implicit deftypeconvertor input int string input.tostring implicit deftypeconvertor input boolean string if...

scala 隱式轉換

隱式轉換就是 當scala編譯器進行型別匹配時,如果找不到合適的候選,那麼隱式轉化提供了另外一種途徑來告訴編譯器如何將當前的型別轉換成預期型別。使用方式 將方法或變數標記為implicit 將方法的引數列表標記為implicit 將類標記為implicit 宣告乙個帶有implicit修飾過引數的方...

scala隱式轉換

目錄 隱式轉換的概念 隱式轉換的使用 隱式轉換做引數型別轉換 隱式轉換增強現有型別 隱式引數 利用隱式引數進行隱式轉換 再議context bounds 隱式轉換函式 implicit conversion function 是以implicit關鍵字宣告的帶有單個引數的函式,這樣的函式將被自動應用...