Spójrz na ten przykład:Jak ujawnić argumenty konstruktora Scala jako członków publicznych?
class Point(x: Double, y: Double){
override def toString = "x: " + x + ", y: " + y
def +(sourcePoint: Point) : Point = {
return new Point(x + sourcePoint.x, y + sourcePoint.y
}
}
Jak widać Chcę zdefiniować metodę +
operatora na klasy Point. Ale to nie będzie działać ponieważ w tej metodzie, x
i y
mogą nie być dostępne na zmiennej lokalnej w sourcePoint
ponieważ są prywatne, więc zmieniłem na ten przykład:
class Point(_x: Double, _y: Double){
var x = _x
var y = _y
override def toString = "x: " + x + ", y: " + y
def +(sourcePoint: Point) : Point = {
return new Point(x + sourcePoint.x, y + sourcePoint.y)
}
}
To oczywiście działa, jednak jest łatwiejszy sposób na zdefiniowanie tych zmiennych zamiast przechodzenia z _x -> x i _y -> y.
Dzięki za pomoc i czas! :)
Kiedy piszesz 'klasa punkt (x: Podwójne, y: Double)', '' y' x' i są tylko parametry dla głównego konstruktora, a nie fileds w klasie. Aby uczynić je polami klasy, potrzebujesz 'val' lub' var'. – markmarch
Aight, thanks! Wydaje się oczywiste teraz haha;) – user1285925
To jest trochę OT, ale nie używaj wyraźnego zwrotu w swojej metodzie "+", jawne zwroty w scala są tłumaczone na wyjątek, który jest wyrzucany i bezpośrednio przechwytywany, a następnie wynik jest zwracany. Używaj tego tylko do wybijania zamknięć. – drexin