Scala 導覽

隱式轉換

語言

隱式轉換是 Scala 的一項強大功能,可支援兩種常見的使用案例

  • 允許使用者提供一種型別的引數,就像它是另一種型別一樣,以避免樣板。
  • 在 Scala 2 中,為封閉類別提供其他成員(在 Scala 3 中已由 延伸方法 取代)。

詳細說明

在 Scala 2 中,從型別 S 到型別 T 的隱式轉換,是由具有單一型別 S 參數的 隱式類別 T、具有函式型別 S => T隱式值,或可轉換為該型別值的隱式方法來定義。

在 Scala 3 中,從型別 S 到型別 T 的隱式轉換,是由具有型別 scala.Conversion[S, T]已提供實例 來定義。為了與 Scala 2 相容,它們也可以由隱式方法定義(在 Scala 2 標籤中閱讀更多資訊)。

隱式轉換應用於兩種情況

  1. 如果表達式 e 的型別為 S,且 S 不符合表達式的預期型別 T
  2. 在選擇 e.m 中,如果 e 的型別為 S,且選擇器 m 沒有表示 S 的成員。

在第一種情況下,會搜尋一個轉換 c,它適用於 e 且其結果類型符合 T

一個範例是將 scala.Int 傳遞給一個預期 scala.Long 的方法,例如 x。在這種情況下,會插入隱式轉換 Int.int2long(x)

在第二種情況下,會搜尋一個轉換 c,它適用於 e 且其結果包含一個名為 m 的成員。

一個範例是比較兩個字串 "foo" < "bar"。在這種情況下,String 沒有成員 <,因此會插入隱式轉換 Predef.augmentString("foo") < "bar"。(scala.Predef 會自動匯入到所有 Scala 程式中。)

進一步閱讀:隱式轉換(在 Scala 書中)

此頁面的貢獻者