隱式轉換

隱式轉換允許編譯器自動將一種型別的物件轉換為另一種型別。這允許程式碼將物件視為另一種型別的物件。

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 的所有轉換。預設情況下,它們包含在任何檔案編譯中。