Dość proste ćwiczenia z książki Cay Horstmann za «Scala dla niecierpliwych» trzyma mnie zastanawiające. To około primary
, auxiliary
i default primary
konstruktorzy:konstruktory w Scala (podstawowy/pomocniczy/default podstawowe)
ex 5.10: rozważyć klasa
class Employee(val name: String, var salary: Double) {
def this() { this("John Q. Public", 0.0) }
}
przepisać używać jawnych pól i konstruktora domyślnego podstawową.
Nie jestem pewien, czy powinienem to zrobić. Czy niektórzy z was mogą zaproponować rozwiązanie?
Jednak próby rozwiązania tego zadania mogły uświadomiły mi czegoś nie zauważyłem wcześniej o podstawowym konstruktora i val
dziedzinach (jak widać, nie jestem pewny):
Am I tak, jeśli powiem, że pole val
(jako name
w powyższej klasie) może być inicjowane tylko przez konstruktor primary
, a nie przez jeden auxiliary
? W tym drugim przypadku kompilator uznałby to za zmianę przypisania do pola val
powodującego błąd.
Najpierw myślałem o polach val
jako przybliżonym odpowiedniku ostatecznych pól w java, spodziewając się, że byłoby legalne przypisanie ich po raz pierwszy w każdym konstruktorze, ale wydaje mi się, że się myliłem.
Nie jestem całkiem zadowolony z tego, co może być tylko dzikie domysły, więc byłbym wdzięczny, gdyby ktoś mógł dać mi dokładniejsze informacje na temat tego punktu.
Miałem to dokładne pytanie z tego samego ćwiczenia. Może jestem zdezorientowany tym, co autor rozumie przez "wyraźny". – vmayer