Ruby 中块、Proc 和 Lambda 的深入解析
1. Ruby 不同版本的块参数问题
在 Ruby 中,不同版本对块参数的处理存在差异。例如,在某些代码运行时,Ruby 1.8 和 Ruby 1.9 的显示结果不同:
- Ruby 1.8 显示:
hello world
100
100
- Ruby 1.9 显示:
hello world
100
hello world
为了确保块参数不会改变块外声明的变量值,无论使用哪个版本的 Ruby,都要保证块参数名不与其他地方的名称重复。例如,将块参数名改为唯一的:
foo{ |b| puts( b ) } # the name 'b' is not used elsewhere
这样,Ruby 1.8 和 Ruby 1.9 运行程序时会产生相同的结果:
hello world
100
hello world
一般来说,当变量共享相同的作用域时,最好使它们的名称唯一,以避免意外的副作用。
2. 块的优先级规则
在 Ruby 中,花括号 {} 内的块比 do...end 内的块具有更强的优先级。例如:
foo bar do
超级会员免费看
订阅专栏 解锁全文
3

被折叠的 条评论
为什么被折叠?



