- 浏览: 329151 次
- 性别:
- 来自: 北京
文章分类
最新评论
1.for循环会在循环以外的scope创建一个局部变量,看下面代码:
for i in [1,2,3] do p i end #123 p i#3
这和each是有区别的,each只是会改变scope外面已存在的局部变量:
[1,2,3].each do |i| print i end p i#undefined local variable or method `i' for main:Object (NameError)
i=5 [1,2,3].each do |i| print i end p i#1233
2.在和Proc结合的时候for循环会出现陷阱:
procs = [] for n in [1, 2, 3] do procs << Proc.new {puts "#{n}"} end [1,2,3].each do |m| procs << Proc.new {puts "#{m}"} end procs.each { |p| p.call } #结果: #3 #3 #3 #1 #2 #3
很显然for的结果出乎我们意料之外。
3.for是用each实现的,并且会在each的scope外创建临时变量。
a=[1,2,3] def a.each puts "call each!" end for i in a puts i end #结果: #call each!
4.for循环的速度比each快一点点:
require 'benchmark' include Benchmark n = 500000 array=(1..n).to_a tmp=nil Benchmark.benchmark(" "*7 + CAPTION, 7, FMTSTR) do |x| tf = x.report("for:") { for i in array; tmp=i; end } tt = x.report("each:") { array.each do |j| ; tmp=j; end } end #结果: user system total real for: 0.172000 0.000000 0.172000 ( 0.172000) each: 0.234000 0.000000 0.234000 ( 0.234000)
评论
11 楼
Hooopo
2009-06-01
kulinglei 写道
希望楼主把主题改成:ruby慎用for循环.我被骗了进来
这是发在ruby版的呀。。
当然是说ruby了
10 楼
kulinglei
2009-06-01
希望楼主把主题改成:ruby慎用for循环.我被骗了进来
9 楼
Hooopo
2009-05-07
wosmvp 写道
参看,右上角相关文章,第一条
关于第二点,加一行,就可以理解了
关于第二点,加一行,就可以理解了
procs = [] for n in [1, 2, 3] do procs << Proc.new {puts n} end n = 4 [1,2,3].each do |m| procs << Proc.new {puts m } end procs.each { |p| p.call }
这么说for和while一样都不是一个scope了。
ps:你是想加 m=4吧?
8 楼
wolfplanet
2009-05-06
引用
.在和Proc结合的时候for循环会出现陷阱:
这是个什么原理?
7 楼
malk
2009-05-06
6 楼
night_stalker
2009-05-05
each 是人民群众喜闻乐见的吊尾 proc,风格归一,行为清楚。
但也正因为 each 是 proc 语法,受 proc 限制。
for in 不是 proc 语法,所以实现上能优化多一点。
我觉得优化瓶颈的时候可以考虑 for,其它时候肯定是 each 好。
http://www.ruby-doc.org/core/classes/Benchmark.html
但也正因为 each 是 proc 语法,受 proc 限制。
for in 不是 proc 语法,所以实现上能优化多一点。
我觉得优化瓶颈的时候可以考虑 for,其它时候肯定是 each 好。
http://www.ruby-doc.org/core/classes/Benchmark.html
5 楼
wosmvp
2009-05-05
参看,右上角相关文章,第一条
关于第二点,加一行,就可以理解了
关于第二点,加一行,就可以理解了
procs = [] for n in [1, 2, 3] do procs << Proc.new {puts n} end n = 4 [1,2,3].each do |m| procs << Proc.new {puts m } end procs.each { |p| p.call }
4 楼
Hooopo
2009-05-05
sofire 写道
受教了,原来还有这样的细微差别呢。
4.为什么for比each快些呢?
4.为什么for比each快些呢?
这个我也不清楚,但是for和each的区别就是在创建变量的方式,我感觉速度差别也是由这个引起的。
3 楼
Hooopo
2009-05-05
deng131 写道
sofire 写道
受教了,原来还有这样的细微差别呢。
4.为什么for比each快些呢?
4.为什么for比each快些呢?
在实际中采用哪种方式好些呐?
当然强烈推荐each
并且1.9中 each 中block临时变量可以给同名局部变量进行赋值的特性(bug?)已经除去。
至于性能只是一点细微差别
2 楼
deng131
2009-05-05
sofire 写道
受教了,原来还有这样的细微差别呢。
4.为什么for比each快些呢?
4.为什么for比each快些呢?
在实际中采用哪种方式好些呐?
1 楼
sofire
2009-05-05
受教了,原来还有这样的细微差别呢。
4.为什么for比each快些呢?
4.为什么for比each快些呢?
发表评论
-
新博客
2012-04-23 20:47 1592https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2018Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 1965最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2228Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2227Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3815普通情况下ruby调用系统命令行的过程是堵塞的,无论是用sys ... -
test
2011-07-15 19:59 0test -
fiber
2011-06-17 09:37 0挖坑,待填。。 1.用到fiber.alive?、fiber ... -
Identity Map in Rails3.1
2011-06-12 18:29 2703Identity Map是Rails3.1的又 ... -
xx00
2011-06-06 03:40 0https://github.com/ngmoco/cache ... -
挖坑1
2011-06-06 02:17 0cache money 源码 替换memcache为redis ... -
websocket demo
2011-06-04 20:44 2019地址:https://github.com/hooopo/we ... -
ruby GC
2011-06-02 04:24 0http://blog.csdn.net/lijun84/a ... -
reduce method missing call stack with dynamic define method
2011-04-22 22:54 1551method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1627像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18854工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4442地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 29761.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1160这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2793Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!
把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。
易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版
移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)
冰冻精灵清除器慎用
SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),
慎用防止窜货的方法.doc
一些要慎用DOS命令.docx
慎用六大软件伤硬盘最终版.pdf
玩客云 灯光控制 容易烧主板 慎用
慎用资本弱化防范税务风险.docx
慎用抗生素 刻不容缓 (小品).docx
保护电脑慎用六大软件伤硬盘
初中语文文摘生活老人慎用电子按摩器
初中语文文摘生活慎用何首乌治白发
易语言处理事件命令慎用时钟版源码。@易语言源码分享站。
易语言处理事件命令慎用线程版源码。@易语言源码分享站。