osservare il seguente codicePerché non posso omettere "apply" in this.apply (_) in Scala?
trait Example {
type O
def apply(o: O)
def f(o: O) = this.apply(o)
}
che compila bene a Scala. Mi aspetterei di lasciare fuori come al solito apply
scrivendo def f(o: O) = this(o)
. Tuttavia, questo si traduce nel messaggio di errore emozionante
type mismatch; found : o.type (with underlying type Example.this.O)
required: _31.O where val _31: Example
possible cause: missing arguments for method or constructor
Qualcuno può spiegarmi cosa sta succedendo?
scusa, non riesco a dedurre quale sia il vero problema, ma vedo il tuo punto. Potresti spiegare ulteriormente? –
È un bug con i tipi astratti. Si noti che l'esempio non di compilazione funziona se si esegue il tipo O concrete (ad esempio "type O = String") o se si rende invece un parametro di tipo (es. "Esempio di tratto [O]".) – extempore
ti capita di conoscere il numero di rilascio di questo bug? –