Mentre la sperimentazione di alcune cose sul REPL, ho avuto modo di un punto in cui avevo bisogno di qualcosa di simile:Sintassi di Scala semplice - cercando di definire l'operatore "==" - cosa mi manca?
scala> class A(x:Int) { println(x); def ==(a:A) : Boolean = { this.x == a.x; } }
Basta una semplice classe con un operatore "==".
Perché non funziona ???
Ecco il risultato:
:10: error: type mismatch; found : A required: ?{val x: ?} Note that implicit conversions are not applicable because they are ambiguous: both method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A] and method any2Ensuring in object Predef of type [A](x: A)Ensuring[A] are possible conversion functions from A to ?{val x: ?} class A(x:Int) { println(x); def ==(a:A) : Boolean = { this.x == a.x; } } ^
Si tratta di scala 2.8 RC1.
Grazie
Suppongo che sia più accurato dire che non è * accessibile * come un campo, cioè non genera metodi di accesso a meno che non lo dichiari come 'val' quando lo passi. –
Mm hmm. Alex potrebbe voler aggiungere 'val' per altri motivi, ma qualcuno potrebbe leggere la tua risposta implicando che è necessario per accedere a' x' nel corpo di 'equals'. –
Ho modificato la mia risposta per chiarire che è necessario 'val' accedere a' a.x' nel corpo di 'equals'. –