为什么yield无法在scala中使用while循环
发布时间:2020-12-16 18:20:45 所属栏目:安全 来源:网络整理
导读:在 Scala中,yield可以用于for循环;例如: val ints: IndexedSeq[Int] = for(i - 1 to 10) yield i 但是我发现yield不能用于while循环,例如喜欢: while (resultSet.next()) yield new Row(resultSet) 为什么Scala设计得像这样? 我在Google和stackoverflow上
在
Scala中,yield可以用于for循环;例如:
val ints: IndexedSeq[Int] = for(i <- 1 to 10) yield i 但是我发现yield不能用于while循环,例如喜欢: while (resultSet.next()) yield new Row(resultSet) 为什么Scala设计得像这样? 我在Google和stackoverflow上搜索过,但找不到答案. 解决方法
因为while循环是一个java等价的while循环,’for循环’被转换为函数调用:< IndexedSeq> .map(如果你使用yield)或< IndexedSeq> .foreach(如果你不在乎)结果).
示例Scala代码: class ForVsWhileLoop { val dummy = for(i <- 1 to 10) yield i var dummy2 = Seq.empty[Int] var i = 0 while(i <= 10) dummy2 :+= i } 编译为(scala -Xprint:parse ForVsWhileLoop.scala): [[syntax trees at end of parser]] // ForVsWhileLoop.scala package <empty> { class ForVsWhileLoop extends scala.AnyRef { def <init>() = { super.<init>(); () }; // *********************************************** // the 'for loop' is translated to a function call val dummy = 1.to(10).map(((i) => i)); var dummy2 = Seq.empty[Int]; var i = 0; // ******************* // classic while loop while$1(){ if (i.$less$eq(10)) { dummy2.$colon$plus$eq(i); while$1() } else () } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- arrays – Bash参数扩展和数组索引操作
- angularjs – 带有ng-repeat的角度列表,日期为分隔符
- Bootstrap组件之下拉菜单
- scala – 是否有类似延续的类型来包装执行块,如(Ctx => R)=
- scala – IntelliJ无法解析Play的build.sbt libraryDepende
- 运行Scala / SBT测试套件时设置环境变量
- bootstrap的datetimepicker时分秒 设为00:00:00
- kendo-ui – 在kendo ui数字文本框中我需要1/10和1/100的百
- 分享bootstarp3.0.2响应式模板-第二弹[Metronic_conquer]
- 为angular2实现自动完成