2013-07-08 8 views

Odpowiedz

27

Oczywistym powodem jest to, aby nie pozostawiać zmiennych niezainicjowanych. Należy pamiętać, że w deklaracji bez inicjalizacji należy również określić typ.

var x: Type; 

daje następujący błąd:

only classes can have declared but undefined members (Note that variables need to be initialized to be defined)

Właściwie tylko klasy abstrakcyjne może zadeklarować członków bez definiowania ich. Nadal można uzyskać pożądanego zachowania (zmienne inicjowane na wartość domyślną) jako

var x: Type = _ 

Jeśli Type to rodzaj odniesienia, x będzie null. Ten scenariusz jest użyteczny, na przykład w przypadku, gdy metoda fabryczna kończy inicjowanie obiektu po zbudowaniu obiektu.

+0

Dobre wyjaśnienie przypadku 'var'. Ponieważ nie można ponownie przypisywać identyfikatorów "val" po deklaracji, zniesienie tego ograniczenia skutecznie zachęciłoby do proliferacji wielu nazw dla 'null'. Co byłoby złe. –

+1

Kopiuję i wklejaję przykład z 'var x: Long = _', ale daje mi to błąd:' Zmienne lokalne muszą być zainicjalizowane'. Czy jest więcej nowych osób, które Scala powinna wiedzieć, aby skorzystać z twojego rozwiązania? Na przykład, ponieważ OP żąda typu liczbowego, jaki byłby odpowiedni numeryczny "Typ" do użycia dla 'x'? – ecoe

+0

Jak widać, notacja "var ... = _" działałaby tylko dla członków klasy, a nie dla zmiennych lokalnych. Uważam, że nie ma żadnych sytuacji uzasadniających niezainicjalizowane zmienne lokalne. –

Powiązane problemy