Wszystkie style oznajmujące scala są tylko złudzeniem. Scala jest zbudowana na jvm i działa jak Java.
Evetything jest klasą i powinno być niezależne od jego użycia (java nie jest w języku C++ i obsługuje przyrostową kompilację z jej zaletami i wadami). Każda cecha ma swój własny kod inicjujący, a klasa wielu cech uruchamia odpowiedni kod inicjalizacyjny jeden po drugim. Jeśli użyjesz jakiejkolwiek wartości AnyRef, która jest zadeklarowana tylko w podklasie, wówczas jej wartość zostanie ustawiona na wartość null podczas inicjowania.
Przestrzegam zasady określania konwencji: każdy znak powinien być albo ostateczny, albo leniwy (why using plain val in non-final classes). Nie obchodzi mnie więc kolejność inicjalizacji i może udawać, że używam języka deklaratywnego.
Używam również opcji -Xcheckinit
: Dodaj sprawdzanie czasu wykonywania do akcesorów pól.
można zdefiniować u jako 'lazy val' –