Vedo ora che c'è una questione connessa chiedendo che cosa questi operatori (<: <, <% <, =: =) fanno qui:Quanto esattamente l'implementazione di Scala di <: <, <% <, =: = funziona nel compilatore?
What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented?
ma io sono ancora confusi circa la loro attuazione. In particolare, suppongo che una volta inserito un parametro implicito che asserisce una particolare relazione, è possibile utilizzare le variabili come se fossero state automaticamente trasmesse correttamente, ad es. questo compila:
class Foo[T](a: T) {
def splitit(implicit ev: T <:< String) = a split " "
}
Ma come funziona effettivamente nel compilatore? C'è qualche supporto per il compilatore magico per questi operatori, e se no, qual è il meccanismo sottostante che gli permette di dedurre questo tipo di relazione dalla definizione? (Questo meccanismo è stato aggiunto in modo specifico per consentire a questi operatori di funzionare e quanto è specifico per questi particolari operatori?) Sembra un po 'magico che si possa inserire un parametro implicito extra come questo che in qualche modo modifica l'interpretazione del compilatore di un tipo.
La fonte per loro https://github.com/scala/scala/blob/v2.9.2/src/library/scala/Predef.scala#L394 – pedrofurla