W Javie rozumiem pola klas jako zmiennektóre są dostępne z całego miejsca w klasie i tego rodzaju opisują strukturę stanu instancji. W polu Java są zdefiniowane poza jakąkolwiek metodą (i to jedyna rzecz, która może znajdować się poza metodami).
W Scali najważniejsze jest „poza jakąkolwiek metodą”konstruktor - innymi słowy: nie ma „poza jakąkolwiek metodą”. Zatem pola są zdefiniowane w głównym konstruktorze. Zatem dowolna zmienna / wartość w konstruktorze jest polem. Nawet argumenty podane konstruktorowi są automatycznie polami klas, a nie lokalnymi zmiennymi konstruktora, jak w Javie.
Na wypadek, gdyby wszystko było dobrze: Czy w konstruktorach Scala są lokalne zmienne / wartości?
Jeśli nie: dlaczego zdecydowano, że coś takiego nie jest potrzebne?
Wyjaśnienie: Pytam o koncepcje, a nie o konkretny przypadek. Również ja nie rób zapytaj, jak obejść, aby uzyskać coś w rodzaju zmiennych lokalnych (chociaż byłbym wdzięczny, gdyby odpowiedź brzmiała, że nie ma żadnych).
Odpowiedzi:
1 dla odpowiedzi № 1Całe ciało klasy jest „wykonawcą”.
Zawsze możesz ograniczyć zakres dowolnej zmiennejbyć małym jak chcesz z parą aparatów ortodontycznych, więc nie ma powodu, aby wprowadzać dodatkową „koncepcję”, która nie służy żadnemu konkretnemu celowi. Brzytwa Ockhama.
class Foo(bar: String) { // constructor parameter
val baz = "baz"; // class member
{
val bat = "bat" // "local" variable
println(bar + baz + bat) // all three are visible
}
println(bar + baz) // only first two are accessble
}
println (new Foo("bar").baz) // only class member can be accessed here