Warum ist implicitConversions für implizite Defs, aber nicht für Klassen erforderlich?

Soweit ich weiß, können implizite Konvertierungen dazu führen, dass Code möglicherweise schwer zu verstehen ist, oder dass Code unter anderen Problemen leidet (möglicherweise sogar unter Fehlern?). Aus diesem Grund ist eine explizite Aktivierung erforderlich, um in Code verwendet werden zu können, ohne dass Warnungen angezeigt werden.

Da implizite Konvertierungen jedoch zum größten Teil (wenn nicht die meiste Zeit) zum Umbrechen eines Objekts mit einem Objekt eines anderen Typs verwendet werden, und implizite Klassen - ich würde mich freuen, wenn Sie mich korrigieren, wenn ich falsch liege - warum erfordern die ersteren den Import vonscala.language.implicitConversions aber letztere nicht?

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()
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage