加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

对于没有顺序的scala的循环?

发布时间:2020-12-16 19:01:37 所属栏目:安全 来源:网络整理
导读:所以,当我通过“不耐烦的 Scala”工作的时候,我发现自己在想:你可以使用没有顺序的Scala循环吗? 例如,本书中有一个练习,要求您构建一个不能通过Integer.MAX_VALUE递增的计数器对象.为了测试我的解决方案,我写了以下代码: var c = new Counterfor( i - 0 t
所以,当我通过“不耐烦的 Scala”工作的时候,我发现自己在想:你可以使用没有顺序的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()

但是有什么办法可以用for语句来做一个传统的C-style for循环吗?

解决方法

实际上,0到N实际上并不填充从0到N的整数的任何东西.而是创建一个scala.collection.immutable.Range的实例,该实例将其方法应用于所有在运行中生成的整数.

您遇到的错误只是因为您必须能够将元素的数量(无论是否存在或不存在)纳入Int的积极部分,以便维护长度方法的合同. 1到Int.MaxValue工作正常,与0一样,直到Int.MaxValue.而后者是你的while循环正在做的(包括正确的端点,直到忽略它).

无论如何,由于Scala是一个非常不同的(比通用的)生物比C,简短的答案是否定的,你不能做完全相同的事情.但是你可以做你想要的(尽管也许没有你想要的那么快,因为有一些性能损失).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读