- 浏览: 335247 次
- 性别:
- 来自: 北京
文章分类
最新评论
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 1734https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2051Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 2006最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2268Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2270Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3860普通情况下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 2737Identity 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 2054地址: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 1592method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1674像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18926工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4480地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 30231.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1210这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2827Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
5. **慎用变量`k`**:在循环中,`k`通常是一个字符串,表示属性名。如果在循环外使用`k`,可能会与循环内的属性名冲突,因此最好在循环内使用局部变量。 总结来说,`for...in`循环在JavaScript中是一个强大的工具,...
2. **慎用eval和Function构造函数**:这些功能强大但执行效率低,可能导致安全问题,应尽量避免。 3. **避免使用with语句**:with会增加作用域链的长度,影响性能。使用变量代替with可以提高代码执行速度。 4. **...
一旦获得锁,其他线程就会被阻塞,从而减少了不必要的循环。 二、CAS错误的使用场景 错误使用CAS的一个常见例子是在高并发环境中,当多个线程尝试修改同一个值时,可能导致大量的自旋。在上述的`CASDemo`示例中,...
7.2 慎用goto语句 7.3 while语句 7.3.1 带运算符的while语句 7.3.2 以字符为条件的while语句 7.3.3 限定while循环的次数 7.3.4 continue语句 7.3.5 break语句 7.3.6 永不休止的while循环 7.4. do……while循环 7.5 ...
7.2 慎用goto语句 7.3 while语句 7.3.1 带运算符的while语句 7.3.2 以字符为条件的while语句 7.3.3 限定while循环的次数 7.3.4 continue语句 7.3.5 break语句 7.3.6 永不休止的while循环 7.4. do……while...
8. **慎用增强型For循环**: - 增强的For循环在处理数组时表现良好,但与Iterable对象配合时会额外创建对象,可能影响性能。 9. **避免过度使用枚举**: - 枚举类型会增加类文件大小,并在初始化时创建多个对象,...
慎用小写字母 l 和大写字母 O,因给他们可能被人错看成数字 1 和 0(D)。 三、 Python 组合数据类型 Python 组合数据类型错误的是(D):Python 的 str、tuple 和 list 类型都属于序列类型(A)。Python 组合数据...
- 除了`scanf`和`printf`,C语言还有其他输入输出函数,如`gets`(已过时,慎用)和`puts`等。 8. **选择结构(if和switch语句)**: - `if`语句用于根据条件执行不同的代码块。 - `switch`语句提供了一种更简洁...
- **慎用增强型for循环**:在某些情况下,传统的for循环可能比增强型for循环更高效。 - **避免使用枚举类型**:枚举类型可能会带来额外的开销,尤其是在性能敏感的应用中。 - **使用内联类**:内联类可以减少内存...
- 有药物过敏史、对食物过敏者或过敏体质患者慎用。 - 本品用于急性循环衰竭时,不能替代一般的休克疗法(如输液、吸氧、外科处理、抗生素治疗等),症状改善后应停止给药。 - 使用时需注意:本品溶解后应尽快使用。...
- **使用for循环**:根据情况选择for或while,for循环通常更适合计数循环。 - **sizeof操作符**:使用sizeof获取类型而非变量的大小,避免意外的字节对齐问题。 - **处理警告**:不要忽略编译警告,它们可能是潜在...
然而,递归方法使用时需要注意,递归深度过大可能会导致栈溢出或性能问题,因此在处理大规模数据时要慎用。 最后,笔记还提到了JavaScript数组的两个方法`join`和`split`。这两个方法常用于字符串和数组之间的转换...
- **慎用DISTINCT**:它会增加计算量,若非必要,尽量避免。 - **谨慎使用UNION**:如果可能,使用UNION ALL以减少排序操作,但要注意可能会引入重复记录。 - **获取最新数据**:优先使用聚合函数而非排序,比如...
第4章讲解了表达式和基本语句的使用,如运算符优先级、复合表达式、条件语句(IF)、循环语句的效率、FOR循环的控制变量、SWITCH语句以及GOTO语句的慎用。这部分内容强调了清晰和高效的代码逻辑。 第5章探讨了常量...
在表达式和基本语句章节,书中深入探讨了运算符优先级、复合表达式的构建原则、if语句的不同形式、循环语句的效率问题、for循环控制变量的管理、switch语句的使用场景以及goto语句的慎用。通过这些细节的讲解,帮助...
5.5.1 慎用字符的Unicode转义形式 5.5.2 中止行注释的转义字符 5.6 泛型可能引起的错误 5.6.1 原始类型变量的赋值 5.6.2 原始类型带来的擦除 5.6.3 创建泛型数组的陷阱 5.7 正则表达式的陷阱 5.8 多线程的...
第4章涉及表达式和基本语句,如运算符优先级、复合表达式、条件语句(IF)、循环效率、FOR语句的循环变量管理、SWITCH语句和GOTO语句的慎用,这些都是编写高效和易于理解代码的关键。 第5章阐述了常量的使用,包括...
第4章涉及表达式和基本语句的使用,如运算符优先级、复合表达式、IF语句、循环语句的效率、FOR语句中的循环控制变量、SWITCH语句以及GOTO语句的慎用,这些都是编写高效、无误代码的基础。 第5章介绍了常量的使用,...
第四章涉及表达式和基本语句,包括运算符优先级、复合表达式、IF语句、高效循环语句、FOR语句的循环控制变量、SWITCH语句的使用以及GOTO语句的慎用,这些都是编程中基础但至关重要的概念。 第五章讲解了常量的使用...