Как именно Scala-реализация < :<, <%<, = := работает в компиляторе?

Теперь я вижу, что есть связанный вопрос о том, что эти операторы (

Что означают

Но я все еще смущен их реализацией. В частности, я предполагаю, что после того, как вы поместили неявный параметр, который утверждает определенную связь, вы можете использовать переменные, как если бы они были автоматически правильно преобразованы, например. это скомпилирует:

class Foo[T](a: T) {
  def splitit(implicit ev: T <:< String) = a split " "
}

Но как это на самом деле работает в компиляторе? Есть ли какая-то волшебная поддержка компилятором для этих операторов, и если нет, то каков лежащий в основе механизм, который позволяет ему выводить такого рода отношения из определения? (Был ли этот механизм добавлен специально для того, чтобы эти операторы могли работать, и насколько специфичен он для этих конкретных операторов? )Кажется немного волшебным, что вы можете поместить такой дополнительный неявный параметр, который каким-то образом изменяет интерпретацию типа компилятором.

7
задан Community 23 May 2017 в 12:27
поделиться