Scala 的 for each,为什么会有且仅有一次 recursion?
Scala 2.10/2.11 中,运行
val l = MutableList(16)
for (i<-l) {
val p = i/2
if (!(l contains p)) {
l += p
}
}
l
得到的是
MutableList[Int](16, 8, 4)
如果是返回 MutableList[Int](16, 8)
(如同 JavaScript 或 PHP)的话我能理解。
或者是返回 MutableList[Int](16, 8, 4, 2, 1, 0)
(如同 Python 或 Ruby) 我也能够理解。
但是返回 MutableList[Int](16, 8, 4)
是为什么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
LZ 的写法确实应该避免.
不过如果深究的话, LZ 的 for 语句, 其实是 foreach 的语法糖 (如果大括号中有 yield, 那就是 map 了).
所以LZ的写法其实是如下的语句:
好了, 现在看一下
foreach
的源码:注意
these
的指向, 应该清晰了吧.为毛要写出这样的代码。在java里一边循环一边修改array就是不允许的。所以这种费解的代码是为了了解编译原理么?