因此,当我通过“Scala for the Impatient”工作时,我发现自己想知道:如果没有序列,您可以使用Scala for循环吗?For循环scala没有序列?
例如,本书中有一项练习要求您构建一个无法在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()
但有没有办法做一个传统的C风格的for循环与for语句?
哇,一个具有挑战性的答案,但一个很好的答案。我只是在学习Scala,所以你用了很多我只是不太熟悉的术语,但是谢谢。 –
'fromTo'的定义可以通过在'Stream'(或'Iterator')伴随对象上使用'iterate'方法进一步简化。 (def fromTo(from:Int,to:Int)= Stream.iterate(from,to - from)(_ + 1)')。但是使用'from to to'更加习惯并且达到同样的效果。 –