2016-05-11 27 views
8

This Scala tutorial bir başlangıç ​​değeri olmayan değişkenleri bildirmek hakkında aşağıdakileri söylemektedir: aşağıdaki gibi bir değişkene herhangi başlangıç ​​değeri atamazsanızbir başlangıç ​​değeri olmayan bir değişken bildirir

, o zaman geçerlidir:

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; 
0123: Ben Scala Repl bu kodu çalıştığınızda
var myVar :Int; 
val myVal :String; 

Ama bu hataları olsun

Bu neden? Scala'nın eski bir sürümü için öğretici mi?
Scala'nın belirli bir sürümünü bulamadığım için bulamadım ancak OpenJDK 64bit, Java 1.8.0_66 üzerinde Scala sürüm 2.11.7 çalıştırıyorum.


  • öğretici modası geçmiş midir, ya da benim çevre ile sorun nedir?

  • Bir değişken (var veya val) başlatılmadan başlatılabilir mi?

cevap

17

Hata doğru, bunu yalnızca soyut bir sınıf veya özellikte yapabilirsiniz. Öğretici, bu kodu soyut bir sınıfın içinde yazdığınızı varsayabilir.

Bazı varsayılan değere değişkenlerini başlatmak mümkündür:

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

Ama bu esasen aynı:

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

Nerede bu "varsayılan" değerlerini nereden geliyor? Bu tür bağımlı mı? Scala derleyicisi, 'String' gibi temel türlerin varsayılanlarını tanımlar mı? – juanmirocks

+0

Kendi sorumu yanıtlarken, tüm "AnyRef" öğelerinin "null" olarak ayarlandığını ve "AnyVal" öğesinin bir şekilde tanımlanmış varsayılan değerlerinin olması gerektiğini tahmin ediyorum (bunun nerede olduğunu hala görmüyorum). – juanmirocks

İlgili konular