Scala 隱式轉換

2021-08-28 12:31:10 字數 1337 閱讀 2774

1.隱式轉換

隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別。

object scala01_implicitnotice 

val num1: int = 1.1

println(num1)

}}// 1) 隱式轉換函式的函式名可以是任意的,隱式轉換與函式名稱無關,只與函式簽名(函式引數類 型和返回值型別)有關。

// 2) 隱式函式可以有多個(即:隱式函式列表),但是需要保證在當前環境下,只有乙個隱式函式能 被識別

2.隱式轉換豐富類庫功能

object scala02_implicit 

//建立mysql物件

val mysql = new mysql

mysql.insert()

mysql.delete() // 編譯器工作 分析 adddelete$1(mysql).delete()

mysql.update()

}}class mysql

}class db

def update(): unit =

}class dog {}

3.隱式值

隱式值也叫隱式變數,將某個形參變數標記為 implicit,所以編譯器會在方法省略隱式引數的情況 下去搜尋作用域內的隱式值作為預設引數

object scala03_implicitvaldemo03 

hello //底層 hello$1(str1);

}}

4.隱式類

在 scala2.10 後提供了隱式類,可以使用 implicit 宣告類,隱式類的非常強大,同樣可以擴充套件類的功 能,比前面使用隱式轉換豐富類庫功能更加的方便,在集合中隱式類會發揮重要的作用。

隱式類使用有如下幾個特點:

5.隱式的轉換時機

7. 隱式解析機制

即編譯器是如何查詢到缺失資訊的,解析具有以下兩種規則:

(1)首先會在當前**作用域下查詢隱式實體(隱式方法、隱式類、隱式物件)。

(2)如果第一條規則查詢隱式實體失敗,會繼續在

a)  如果t被定義為t with a with b with c,那麼a,b,c都是t的部分,在t的隱式解析過程中,它們的伴生物件都會被搜尋。

b)  如果t是引數化型別,那麼型別引數和與型別引數相關聯的部分都算作t的部分,比如list[string]的隱式搜尋會搜尋list的伴生物件和string的伴生物件。

c)  如果t是乙個單例型別p.t,即t是屬於某個p物件內,那麼這個p物件也會被搜尋。

d)  如果t是個型別注入s#t,那麼s和t都會被搜尋。

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