09 Scala 隱式轉換和隱式值

2021-10-06 11:05:49 字數 1475 閱讀 6379

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

3. 隱式值

4. 隱式類

5. 隱式轉換時機

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

object implicitdemo01 

val num: int = 3.5 // 底層編譯 f1$1(3.5)

println("num =" + num) // 3

} }

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

隱式函式可以有多個,但需要保證在當前環境下,只有乙個隱式函式能被識別。

案例**

object implicitdemo02 

// 建立mysql物件

val mysql = new mysql

mysql.insert()

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

}}class mysql

}class db

}

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

object implicitvaldemo 

hello // 呼叫輸出:zgl, hello! 底層:hello$1(str)

}}

當在程式中,同時有隱式值、預設值、傳值,編譯器的優先順序為:傳值 > 隱式值 > 預設值。

在隱式值匹配時,不能有二義性。

如果三個(隱式值、預設值、傳值)乙個都沒有,就會報錯。

可以使用implicit宣告類,隱式類非常強大,同樣可以擴充套件類的功能,在集合中隱式類會發揮重要作用。

其所帶的構造引數有且只能有乙個。

隱式類必須被定義在「類」或「伴生物件」或「包物件」裡,即隱式類不能是頂級的(top-level objects)。

隱式類不能是case class(樣例類)。

作用域內不能有與之相同的識別符號。

object implicitclass 

}// 建立 mysql 例項

val mysql = new mysql

mysql.insert() // 呼叫自身方法

mysql.addsuffix() // 使用隱式類 db$1(mysql).addsuffix()

}}class mysql

}

當方法中的引數型別與目標型別不一致時,或者是賦值時。

當物件呼叫所在類中不存在的方法或成員時,編譯器會自動將物件進行隱式轉換。

Scala 基礎11 隱式轉換和隱式值

1 隱式函式 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 object scala01 使用隱式函式可以優雅的解決資料型別轉換 implicit def f1 d double int double 是輸入型別,int 是轉換...

scala隱式轉換函式及隱式值

隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式,這種函式將會自動呼叫,將值從一種類 型轉換到另一種型別,使用隱式函式可以優雅的解決資料型別轉換 隱式轉換的注意事項和細節 1 隱式轉換函式的函式名可以是任意的,隱式轉換與函式名稱無關,只與函式 簽名 函式引數型別和 返...

Scala 隱式轉換和隱式引數

紙上得來終覺淺,絕知此事要躬行!隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 隱式函式快速入門 使用隱式函式可以優雅的解決資料型別轉換,案例入門.implicit def f1 d double int dou...