32

私が理解している限りでは、暗黙的な変換はコードを理解するのが困難になる可能性があり、コードが他の問題 (おそらくバグでさえ?) に悩まされる可能性があります。そのため、警告を受けずにコードで使用するには、明示的に有効にする必要があります。

ただし、暗黙的な変換の大部分は (ほとんどの場合ではないにしても) オブジェクトを別の型のオブジェクトでラップするために使用され、暗黙的なクラスも同様に使用されることを考えると、間違っている場合は修正していただければ幸いです。前者はインポートを必要とするscala.language.implicitConversionsのに、後者は必要としないのはなぜですか?

object Main extends App {
  implicit class StringFoo(x: String) {
    def fooWithImplicitClass(): Unit =
      println("foo with implicit class")
  }
  // => silence.

  "asd".fooWithImplicitClass()

  /************************/

  class Foo(x: String) {
    def fooWithImplicitDef(): Unit =
      println("foo with implicit def")
  }
  implicit def string2Foo(x: String) = new Foo(x)
  // => warning: implicit conversion method string2Foo should be enabled

  "asd".fooWithImplicitDef()
}
4

2 に答える 2