Scala 隱式轉換

2021-10-14 09:00:14 字數 1520 閱讀 5886

隱式值是指在定義引數時前面加上implicit。隱式引數是指在定義方法時,方法中的部分引數是由implicit修飾【必須使用柯里化的方式,將隱式引數寫在後面的括號中】。隱式轉換作用就是:當呼叫方法時,不必手動傳入方法中的隱式引數,scala會自動在作用域範圍內尋找隱式值自動傳入。

隱式值和隱式引數注意:

同型別的引數的隱式值只能在作用域內出現一次,同乙個作用域內不能定義多個型別一樣的隱式值。

implicit 關鍵字必須放在隱式引數定義的開頭

乙個方法只有乙個引數是隱式轉換引數時,那麼可以直接定義implicit關鍵字修飾的引數,呼叫時直接建立型別不傳入引數即可。

乙個方法如果有多個引數,要實現部分引數的隱式轉換,必須使用柯里化這種方式,隱式關鍵字出現在後面,只能出現一次

object implicittrans 

def main(args: array[

string])

:unit

=}

輸出:zhangsan is a student,age=25

隱式轉換函式是使用關鍵字implicit修飾的方法。當scala執行時,假設如果a型別變數呼叫了method()這個方法,發現a型別的變數沒有method()方法,而b型別有此method()方法,會在作用域中尋找有沒有隱式轉換函式將a型別轉換成b型別,如果有隱式轉換函式,那麼a型別就可以呼叫method()這個方法。

隱式轉換函式注意:隱式轉換函式只與函式的引數型別和返回型別有關,與函式名稱無關,所以作用域內不能有相同的引數型別和返回型別的不同名稱隱式轉換函式。

class man(name:

string)}

class fman(name:

string

)object implicittrans2

def main(args: array[

string])

:unit

=}

output: tom can speak

使用implicit關鍵字修飾的類就是隱式類。若乙個變數a沒有某些方法或者某些變數時,而這個變數a可以呼叫某些方法或者某些變數時,可以定義乙個隱式類,隱式類中定義這些方法或者變數,隱式類中傳入a即可。

隱式類注意:

隱式類必須定義在類,包物件,伴生物件中。

隱式類的構造必須只有乙個引數,同乙個類,包物件,伴生物件中不能出現同型別構造的隱式類。

class a(name:

string

)object implicittrans3 is a")}

}def main(args: array[

string])

:unit

=}

output:*** is a

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關鍵字宣告的帶有單個引數的函式,這樣的函式將被自動應用...