Теперь я вижу, что есть связанный вопрос о том, что эти операторы (
Но я все еще смущен их реализацией. В частности, я предполагаю, что после того, как вы поместили неявный параметр, который утверждает определенную связь, вы можете использовать переменные, как если бы они были автоматически правильно преобразованы, например. это скомпилирует:
class Foo[T](a: T) {
def splitit(implicit ev: T <:< String) = a split " "
}
Но как это на самом деле работает в компиляторе? Есть ли какая-то волшебная поддержка компилятором для этих операторов, и если нет, то каков лежащий в основе механизм, который позволяет ему выводить такого рода отношения из определения? (Был ли этот механизм добавлен специально для того, чтобы эти операторы могли работать, и насколько специфичен он для этих конкретных операторов? )Кажется немного волшебным, что вы можете поместить такой дополнительный неявный параметр, который каким-то образом изменяет интерпретацию типа компилятором.