for和each的区别主要在于:
- for是通过调用each实现,因此for更慢一些
- for会在each的scope之外创建一个局部变量,这在某些情况下会引发问题
关于第二点,下面的代码可以很好的说明这个问题:
[1, 2, 3].each do |m| puts m end
puts m # => NameError: undefined local variable or method `m' for main:Object
for n in [1, 2, 3] do puts n; end
puts n # => 3
如果你不了解这一点,那么在某些特殊的情况下,你可能会遇到麻烦,下面的代码可以很好的说明for可能引发的问题:
a = []
for n in [1, 2, 3] do
a << Proc.new {puts "#{n}"}
end
[1, 2, 3].each do |m|
a << Proc.new {puts "#{m}"}
end
a.each { |p| p.call } # => 3 3 3 1 2 3
很显然,for循环的结果不是我们所期待的,因此,结论就是:应该尽可能的使用each替代for循环。
"for i in [1, 2]"就相当于"i = nil;[1, 2].each do |i|",这才是for真正的问题所在。
分享到:
相关推荐
VB For each循环实例 VB For each循环实例
for_each 返回值实例详解;
MATLAB工具箱大全-将多重循环转为单重循环-For-Each
下面小编就为大家带来一篇浅谈java 增强型的for循环 for each。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
值得注意的是,Python的for循环不同于其他语言中的传统for循环,它更像是“for each”循环,直接遍历可迭代对象的元素,而不需要手动管理索引或迭代器。这种简洁的语法使得for循环在Python中非常常用且易于理解。 ...
其实查看jQuery的源代码,发现each的代码很简单,但为什么性能和原生的for循环相差几十倍呢? jQuery的each的核心代码 for (; i < length; i++) { value = callback.call(obj[i], i, obj[i]); if (value === ...
下面是用一个传统的for循环遍历集合的例子:用传统的for循环遍历数组的做法如下:这些做法逗比while循环更好,但是它们并不完美。如果真的那么不幸,并且外部集
查些资料,并且试验过发现下面方法可以 1、for循环中我们使用continue;终止本次循环计入下一个循环,使用break终止整个循环。 2、而在jquery中 $.each则对应的使用return true 和return false。 break可以跳出switch...
for循环与foreach的区别 foreach 依赖 IEnumerable. 第一次 var a in GetList() 时调用 GetEnumerator 返回第一个对象并赋给a, 以后每次再执行 var a in GetList() 的时候调用 MoveNext.直到循环结束. 期间GetList()...
For 和 Foreach 的效率问题,先猜一下,再运行一下,看猜的对不对。
Excel VBA运用,删除行,循环For each next,rows.count计算,添加指定数据等, 打开Excel启用宏,然后按快捷键Ctrl+E
22 For-Each 23 PlotPub 24 Sheffield大学最新遗传算法工具箱 25 Camera Calibration 像机标定工具箱 26 Qhull(二维三维三角分解、泰森图)凸包工具箱 2019版 27 jplv7 28 MatlabFns 29 张量工具箱Tensor Toolbox 30 ...
Query中each类似于javascript的for循环 但不同于for循环的是在each里面不能使用break结束循环,也不能使用continue来结束本次循环,想要实现类似的功能就只能用return, break 用return false continue 用return ...
本文详解了JAVA中的for-each循环与迭代,是JS入门学习中的基础知识,也是java中的难点知识,需要的朋友可以参考下 。
今天学习了JavaScript里面的for循环以及if的判断语句 for(初始值;循环条件;操作){ 满足条件要执行的代码语句 } 初始值:循环前的初始化变量,通常为赋值表达式:建议用var赋值,可以加快运行速度。 循环条件:...
for循环和foreach循环其实可以算得上是从属关系的,即foreach循环是可以转化成for循环,但是for循环不一定能转换成foreach循环。 下面简单介绍一下两种循环: 1.for循环 代码格式: for(表达式1;循环条件;表达式2) {...
//标准的for循环 for(var i=1;i<array.length;i++){ alert(array[i]) } //foreach循环 for(var i in array){ alert(array[i]) } 正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一...
从Java5起,在Java中有了for-each循环,可以用来循环遍历collection和...For each循环允许你在无需保持传统for循环中的索引,或在使用iterator /ListIterator时无需调用while循环中的hasNext()方法就能遍历collection
本文将详细给大家关于C#中foreach循环对比for循环的优势和劣势,下面话不多说了,来一起看看详细的介绍吧。 一、foreach循环的优势 C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势: 1、...