2016-08-23 1 views
0

を呼び出すことによって、フィールドを初期化しますはどのように以下のクラスをコンパイルすることを拒否する方法

class InitTest { // Class 'InitTest' must either be declared abstract 
       // or implement abstract member 'v: Int' 

    var v: Int 

    def int(v : Int) = { 
    this.v = v 
    } 
} 

私は一種の私たちは、「初期化されていない」の値を離れることができないということで驚きました。 Javaでは、nullが割り当てられます。 Scalaでは、コンパイルされません。 Scalaでこれを行うには?

答えて

2

あなたがこれを行うことができます:

class InitTest { 
    var v: Int = _ 
    def int(v : Int) = { 
    this.v = v 
    } 
} 

vが値型を持っているので、それにnullを割り当てる方法はありません。ただし、Scalaでは_を使用して「ゼロ」の値を表します。数値の場合は0、ポインタがnullの場合初期化されていない値を表す良い方法。

+0

しかし、 '_'を割り当てるのはどういう意味ですか? – stella

+0

@stellaこのスレッドを見るhttp://stackoverflow.com/questions/8336640/in-scala-what-exactly-does-val-a-a-underscore-mean – ccheneson

関連する問題