2016-04-02 4 views
1

は私がループ本体の `val`はなぜ複数の値をとることができますか?

「valが」変更すると、決して割り当てられた変数、およびだけヴァルの状態変化であることを学びました。

と私は

valが複数回定義することができませんでした知っています。

私は次のコードを実行するとき(ソケット消費者のように思える)

while (is.read(buf) > 0) { 
    val input = new String(buf) 
    println(input) 
} 

println(input)は異なるライン各反復を示します。どうしたの?

inputが新しく定義されているか、またはinputが新しく定義されておらず、数回だけ変更されたようです。

valが変更できない場合、どうすれば可能ですか?

答えて

3

valに割り当てられたオブジェクトは置き換えられません。
inputは、whileループのスコープ内でのみ定義されているため、すべての繰り返しで破棄され、再度宣言されます。

while (is.read(buf)>0) 
{ 
    val input = new String(buf) // declared afresh in every iteration 
    println(input) 
}        // input is destroyed when you reach here 
println(input)     // input is not defined in this scope 
1

これは、ループ内のvalを初期化したためです。ループが実行されるたびに、古いvalがスコープされ、新しいvalが新しい値で作成されます。

関連する問題