现在我看到有一个相关的问题问的这些运营商(<:<,<%<,=:=)在这里做的:<:<,<%<,=:=的Scala实现究竟如何在编译器中工作?
What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented?
但我仍然感到困惑的具体实现。特别是,我假设一旦你放置了一个隐含的参数来断言一个特定的关系,那么你可以使用变量,就好像它们已经被自动正确地转换一样。这将编译:
class Foo[T](a: T) {
def splitit(implicit ev: T <:< String) = a split " "
}
但是,如何在编译器中实际工作?是否有一些神奇的编译器支持这些运算符,如果没有,那么允许它从定义中推断这种关系的底层机制是什么? (这个机制是专门为了让这些操作符工作而添加的,它们对这些特定的操作符有多特殊?)似乎有点神奇,你可以放置一个额外的隐式参数,它以某种方式改变了编译器对类型的解释。
他们的来源https://github.com/scala/scala/blob/v2.9.2/src/library/scala/Predef.scala#L394 – pedrofurla 2012-07-15 04:12:17