隱式轉換是 Scala 的一項強大功能,可支援兩種常見的使用案例
- 允許使用者提供一種型別的引數,就像它是另一種型別一樣,以避免樣板。
- 在 Scala 2 中,為封閉類別提供其他成員(在 Scala 3 中已由 延伸方法 取代)。
詳細說明
隱式轉換應用於兩種情況
- 如果表達式
e
的型別為S
,且S
不符合表達式的預期型別T
。 - 在選擇
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 書中)。