2013-07-08 10 views

答えて

27

明らかな理由は、変数を初期化しないでおくのを助けることです。 初期化のない宣言でも、型を指定する必要があることに注意してください。

var x: Type; 

は、次のエラーを与える:

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

実際に唯一の抽象クラスは、それらを定義せずにメンバーを宣言することができます。あなたはまだTypeが参照型である場合、xnullなります

var x: Type = _ 

として所望の動作(デフォルト値に初期化された変数)を取得することができます。このシナリオは、たとえば、ファクトリメソッドがオブジェクトの構築後にオブジェクトの初期化を完了した場合などに便利です。

+0

'var'ケースの良い説明。宣言の後に 'val'識別子を再割当てすることはできないので、この制限を解除すると' null'の複数の名前の増殖を効果的に促進するでしょう。どちらが悪いですか。 –

+1

私はあなたの例を 'var x:Long = _'でコピーして貼り付けますが、'ローカル変数を初期化する必要があります。 'というエラーが表示されます。ソリューションを使用するためにScalaが知る必要がある新入社員はまだありますか?たとえば、OPが数値型を要求しているとき、 'x'に使用する適切な数値型' Type'は何でしょうか? – ecoe

+0

ご覧のとおり、 'var ... = _'表記はクラスメンバーに対してのみ機能し、ローカル変数に対しては機能しません。私は、初期化されていない地域変数を保証する状況はないと信じています。 –

関連する問題