Dlaczego konwersje implicitConvers są wymagane dla ukrytych defektów, ale nie dla klas?
Z tego, co rozumiem, niejawne konwersje mogą spowodować potencjalnie trudny do zrozumienia kod lub kod cierpiący na inne problemy (być może nawet błędy?), Dlatego wymagają wyraźnego włączenia, aby móc korzystać z kodu bez uzyskiwania ostrzeżeń.
Jednakże, biorąc pod uwagę, że niejawne konwersje są w dużej części (jeśli nie przez większość czasu) używane do zawijania obiektu obiektem innego typu, tak samo jak ukryte klasy - byłbym wdzięczny za poprawienie mnie, jeśli się mylę -, dlaczego ten pierwszy wymaga importuscala.language.implicitConversions
ale ten drugi nie?
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()
}