Может ли кто-нибудь объяснить мне, почему scala разрешает наиболее общие неявные значения, независимо от того, являются ли они более конкретными?
Пример:
import scala.math.ScalaNumber
type Serializer[T] = T => String
object SerializedOps{
implicit class AnyOps[T](t: T){
def serialize(implicit s: Serializer[T]) : String = s(t)
}
}
object Instances{
implicit val scalaNumber : Serializer[ScalaNumber] = _.toString + "_DEFAULT"
}
import SerializedOps._
import Instances._
implicit val bigDecimalCustom : Serializer[BigDecimal] = _.toString + "_CUSTOM"
val res: String = BigDecimal(100).serialize
//res: String = 100DEFAULT
Почему я не могу определить новый неявный более конкретный в моей локальной области? Как scala разрешает имплициты?