2016-05-11 13 views
8

This Scala tutorial ma następujący powiedzieć o deklarowania zmiennych bez wartości początkowej:Zadeklaruj zmienną bez wartości początkowej

Jeśli nie przypisać dowolną wartość początkową do zmiennej, to jest ważne, co następuje:

var myVar :Int; 
val myVal :String; 

Ale gdy próbuję tego kodu w Scala REPL, otrzymuję te błędy:

scala> var myVar :Int; 
<console>:10: error: only classes can have declared but undefined members 
(Note that variables need to be initialized to be defined) 
     var myVar :Int; 
     ^

scala> val myVal :String; 
<console>:10: error: only classes can have declared but undefined members 
     val myVal :String; 

Dlaczego tak jest? Czy samouczek dotyczący starszej wersji Scala?
Nie mogłem znaleźć konkretnej wersji Scali, dla której napisano samouczek, ale używam wersji 2.11.7 Scala na OpenJDK 64bit, Java 1.8.0_66.


  • Czy poradnik nieaktualne, albo jest problem z moim otoczeniu?

  • Czy można zadeklarować zmienną (var lub val) bez jej inicjowania?

Odpowiedz

17

Błąd jest prawidłowy, można to zrobić tylko w przypadku abstrakcyjnej klasy lub cechy. Samouczek może zakładać, że piszesz ten kod wewnątrz abstrakcyjnej klasy.

Możliwe jest inicjowanie zmiennych pewną wartością domyślną:

var i: Int = _ 
var s: String = _ 

Ale to w zasadzie takie same, jak:

var i: Int = 0 
var s: String = null 
+0

Gdzie są te "domyślne" wartości pochodzących z? Czy to zależy od typu? Czy kompilator scala definiuje wartości domyślne dla podstawowych typów takich jak 'String'? – juanmirocks

+0

Odpowiadając na moje własne pytanie, domyślam się, że wszystkie 'AnyRef' są ustawione domyślnie na' null', i że 'AnyVal' musi mieć jakoś zdefiniowaną wartość domyślną (nadal nie widzę, gdzie to się dzieje). – juanmirocks

Powiązane problemy