現在我看到有一個相關的問題問的這些運營商(<:<,<%<,=:=)在這裏做的:<:<,<%<,=:=的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