gpt4 book ai didi

scala - 没有序列的scala中的for循环?

转载 作者:行者123 更新时间:2023-12-04 02:40:09 25 4
gpt4 key购买 nike

所以,在我完成“不耐烦的 Scala”的过程中,我发现自己在想:你能使用 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 循环?

最佳答案

事实上,0 to N实际上并没有用来自 0 的整数填充任何东西至 N .相反,它创建了一个 scala.collection.immutable.Range 的实例。 ,它将其方法应用于动态生成的所有整数。

您遇到的错误只是因为您必须能够将元素的数量(无论它们是否实际存在)放入 Int 的正数部分。为了维护契约(Contract)length方法。 1 to Int.MaxValue工作正常,就像 0 until Int.MaxValue .后者就是你的 while 循环正在做的事情( to 包括正确的端点, until 忽略它)。

无论如何,自从 Scala for是一种与 C for 非常不同(更通用)的生物,简短的回答是否定的,你不能做完全相同的事情。但是你可能可以用 for 做你想做的事(虽然可能没有你想要的那么快,因为有一些性能损失)。

关于scala - 没有序列的scala中的for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com