我一直在试图理解这篇文章中提出的问题的答案。
下面的代码重现了接受的答案中提出的解决方案。
object Finder {
def find[T <: Node](name: String)(implicit e: T DefaultsTo Node): T =
doFind(name).asInstanceOf[T]
}
sealed class DefaultsTo[A, B]
trait LowPriorityDefaultsTo {
implicit def overrideDefault[A,B] = new DefaultsTo[A,B]
}
object DefaultsTo extends LowPriorityDefaultsTo {
implicit def default[B] = new DefaultsTo[B, B]
}
如果隐式定义为
(implicit e: DefaultsTo[T, Node])
但相反,它是用看起来像中缀符号的东西定义的。我从来不知道一个类型DefaultsTo[T, Node]
可以写成T DefaultsTo Node
. 这是怎么回事?