このプログラムはstdioからいくつかの番号(改行のそれぞれの番号)を読み込みます。私は数字を一度しか入力しない! ここで、値 "it"は(lazy valとは対照的に)定義ポイントで評価され、 "it"はRHSの結果で置き換えられるべきです。stdioからscalaを読み込み中に評価する
最初のprintln(it.size)が呼び出されるときまでに、「it」は既に評価されています。それではなぜprinlnへの2回目の呼び出しは常にゼロを返しますか? stdioから再び読み込みを試みるように見え、何も読み込まれていないのでゼロを返します。
object Test {
def main(args: Array[String]) {
val it= io.Source.stdin.getLines().map(_.toInt)
println(it.size) // prints correct number of lines
println(it.size) // prints zero always????
}
}
Ahaなので、size関数はイテレータの状態を変換します。私はそれが整数を返すだけであり、イテレータを変更しないままにしていると思いました。ありがとう:) – Samar