Scala automatische getter und setter überschreiben mit benutzerdefinierten _=
In scala gibt es keinen Unterschied für den Benutzer einer Klasse zwischen dem Aufruf einer Methode oder den Zugriff auf einige Feld/Mitglied direkt mit val x = myclass.myproperty. Um kontrollieren zu können, z.B. setzen oder sich ein Feld, scala lassen Sie uns das überschreiben der _= Methode. Aber ist = wirklich eine Methode? Ich bin verwirrt.
Nehmen wir den folgenden code:
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //prints 50
Gleiche gilt für diesen code (beachten Sie die doppelten Leerzeichen in myCar.miles = 50
):
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //still prints 50
Nun will ich die Art und Weise ändern, wie die miles
werden kann, gelesen oder gesetzt werden, z.B. immer den Druck, etwas auf dem Bildschirm. Wie kann ich dies tun, so dass die Benutzer meiner Klasse sind davon nicht betroffen, und auch so, dass es nicht keinen Unterschied machen, wenn Leerzeichen vor dem = - Zeichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Whitespace nicht signifikant ist. Der compiler sieht man die Zuordnung
miles
und legen Sie einen Anruf zumiles_=
egal, wie viele Leerzeichen einfügen._=
suffix hat eine Besondere Bedeutung. Sie können sich auch an denmiles_=
Methode, mit vollem Namen — es sieht einfach hässlich aus.miles =
undmiles_=
so der Namensraum ist begrenzt. Ich wollte nur sicherstellen, dass ich es richtig gemacht.var
erklärt auch die zwei accessor-Methoden, die mit ihm zu gehen.