scala迭代器hasNext随机行为


var intList = Iterator(range(1,10))
println("data"+intList)
println(intList.hasNext)

最后一行给出True,而对于

var intList = Iterator(range(1,10))
println("data"+intList.toList)
println(intList.hasNext)

最后一行给出错误

为什么即使intList是不可变的,我也不会把它分配给任何新的变量。

列表在Scala中是不可变的。但是,您的intList不是一个列表;它是一个Iterator,它使用next()进行迭代,并且是可变的。

println("data " + intList)

这将打印出迭代器的表示形式。它可能会说类似";非空迭代器";。它所需要做的就是调用hasNext,这不会改变任何内容。

println("data " + intList.toList)

toList是一个方法(不要让括号的缺失欺骗了你;你在对象上调用的所有东西都是Scala中的一个方法(,它耗尽了迭代器,这意味着它调用next(),直到什么都没有了。那么迭代器是空的,所以hasNext正确地告诉您没有下一个值。

最新更新