所以,在阅读《Scala for the Impatient》时,我想知道:是否可以在没有序列的情况下使用Scala的for循环?
例如,书中有一个练习要求您构建一个计数器对象,该对象不能超过Integer.MAX_VALUE。 为了测试我的解决方案,我编写了以下代码:
var c = new Counter
for( i <- 0 to Integer.MAX_VALUE ) c.increment()
这会抛出一个错误:序列不能包含超过Int.MaxValue个元素。我认为这意味着Scala首先要分配并填充一个序列对象,包含从0到Integer.MaxValue的值,然后在该序列对象上执行foreach循环。
我意识到我可以使用以下方法代替:
var c = new Counter
while(c.value < Integer.MAX_VALUE ) c.increment()
但是有没有办法使用for语句来执行传统的C风格for循环呢?
fromTo
的定义可以通过使用Stream
(或Iterator
)伴生对象上的方法iterate
进一步简化。类似于:def fromTo(from: Int, to: Int) = Stream.iterate(from, to - from)(_ + 1)
。但是使用from until to
更符合惯用语,并且实现同样的功能。 - Kipton Barros