Scala 隐式解析选择最特定的子类型
有人能解释为什么scala解析最通用的隐式,而不管局部范围隐式更具体吗 例如:Scala 隐式解析选择最特定的子类型,scala,implicit,subtype,scalac,Scala,Implicit,Subtype,Scalac,有人能解释为什么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{
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是如何解析隐式的?:
如果有多个符合条件的参数与隐式
参数的类型,将使用规则选择最具体的类型
静态重载的解析
然而,函数的参数类型使
ScalaNumber => String
一种
BigDecimal => String
因此,
ScalaNumber=>String
更为具体。请注意,type Serializer[T]=T=>String
对函数类型进行了别名处理。查看-和。现在已经很清楚了,但是有一种方法可以实现我需要的功能吗?定义泛型序列化程序并在本地范围中定义更具体的序列化程序?