我现在看到有一个相关的问题,询问这些运算符 (<:<, <%<, =:=) 在这里做什么:
<:<、<%< 和 =:= 在 Scala 2.8 中是什么意思,它们在哪里记录?
但我仍然对他们的实施感到困惑。特别是,我假设一旦您放置了一个断言特定关系的隐式参数,那么您就可以使用变量,就好像它们已经自动正确地强制转换一样,例如,这将编译:
class Foo[T](a: T) {
def splitit(implicit ev: T <:< String) = a split " "
}
但是这在编译器中实际上是如何工作的呢?这些运算符是否有一些神奇的编译器支持,如果没有,允许它从定义中推断出这种关系的底层机制是什么?(这个机制是为了让这些运算符工作而特别添加的吗?它对这些特定的运算符有多具体?)你可以像这样放置一个额外的隐式参数似乎有点神奇,它会以某种方式改变编译器对类型的解释。