隱式轉換
隱式轉換允許編譯器自動將一種型別的物件轉換為另一種型別。這允許程式碼將物件視為另一種型別的物件。
case class Foo(i: Int)
// without the implicit
Foo(40) + 2 // compilation-error (type mismatch)
// defines how to turn a Foo into an Int
implicit def fooToInt(foo: Foo): Int = foo.i
// now the Foo is converted to Int automatically when needed
Foo(40) + 2 // 42
轉換是單向的:在這種情況下,你無法將 42
轉換回 Foo(42)
。為此,必須定義第二個隱式轉換:
implicit def intToFoo(i: Int): Foo = Foo(i)
請注意,這是一種機制,通過該機制可以將浮點值新增到整數值。
應謹慎使用隱式轉換,因為它們會混淆正在發生的事情。最佳做法是通過方法呼叫使用顯式轉換,除非使用隱式轉換獲得有形的可讀性。
隱式轉換沒有顯著的效能影響。
Scala 會自動匯入 scala.Predef
中的各種隱式轉換,包括從 Java 到 Scala 的所有轉換。預設情況下,它們包含在任何檔案編譯中。