0
このコードを実行すると 1)var b:Int = _。その端末上で正常に動作していますvar b:int = _はコンパイルエラーを返します
しかし、IDEで実行すると、コンパイルエラーが発生します。 ここに何か不足していますか?
このコードを実行すると 1)var b:Int = _。その端末上で正常に動作していますvar b:int = _はコンパイルエラーを返します
しかし、IDEで実行すると、コンパイルエラーが発生します。 ここに何か不足していますか?
注:変数のデフォルトの初期化は、クラスまたはオブジェクト内で機能しますが、関数(ローカル変数)では機能しません。あなたは、クラス内でこれを使用するか、オブジェクト
scala> :paste // Entering paste mode (ctrl-D to finish) object Bar { var i: Int = _ } // Exiting paste mode, now interpreting. defined object Bar
で
scala> :paste // Entering paste mode (ctrl-D to finish) class Foo { var i: Int = _ } // Exiting paste mode, now interpreting. defined class Foo
オブジェクトへの[OK]を関数の内部で
scala> :paste // Entering paste mode (ctrl-D to finish) def foo(a: Int): Int = { var b: Int = _ a } // Exiting paste mode, now interpreting. <pastie>:12: error: local variables must be initialized var b: Int = _ ^
をデフォルト値の初期化を使用しようとしている
なぜそれがREPLで動作するのですか?
scala> var i: Int = _
i: Int = 0
REPLプロンプトに直接書き込まれたものはすべて、デフォルトでオブジェクトによってラップされます。そのため、REPLではこのエラーは発生しません。
この主張を証明するために、デフォルトでREPLに書かれているものはオブジェクトによって包まれています。コンテキスト内の現在のオブジェクトを参照するthis
を使用して小さな関数を書くことができます。
scala> :paste
// Entering paste mode (ctrl-D to finish)
def experiment(): Unit = println(s"${this.getClass}")
experiment()
// Exiting paste mode, now interpreting.
class $line13.$read$$iw$$iw$
experiment:()Unit
クール!できます。コードがこのコンテナで囲まれています$line13.$read$$iw$$iw$
エラーは何ですか? – pamu
ローカル変数を初期化する必要があります –