podczas eksperymentowania z niektórych rzeczy na REPL, mam do punktu gdzie ja potrzebowałem czegoś takiego:Prosta składnia Scala - próba zdefiniowania operatora "==" - czego mi brakuje?
scala> class A(x:Int) { println(x); def ==(a:A) : Boolean = { this.x == a.x; } }
Wystarczy prosty klasy z „==” operatora.
Dlaczego to nie działa?
Oto wynik:
: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; } } ^
To scala 2.8 RC1.
Dzięki
Przypuszczam, że dokładniej jest powiedzieć, że nie jest * dostępny * jako pole, tzn. Nie generuje metod dostępu, chyba że deklarujesz go jako "val", gdy go przekażesz. –
Mm hmm. Alex może chcieć dodać "val" z innych powodów, ale ktoś mógłby odczytać twoją odpowiedź jako sugerującą, że jest potrzebna, aby uzyskać dostęp do 'x' w ciele' równa się'. –
Edytowałem swoją odpowiedź, aby wyjaśnić, że potrzebujesz 'val', aby uzyskać dostęp do' a.x' w ciele 'równa się'. –