Ruby 一个方法中的两个闭包会影响同一个变量

yangman_wenzhu · 2012年11月05日 · 最后由 yangman_wenzhu 回复于 2012年11月05日 · 1937 次阅读

def multipliers(*args) x = nil # args.map{|d| p d} args.map { |e| lambda {|y| e*y} } end double,triple = multipliers(2,3)

p double.call(2) 返回结果是 4 不是 6,我测试的结果也是 4(ruby1.8.7),为什么不是 6 呢

Lambda , Proc 和 Block 的区别。。。

是正常的啊,为什么期望得到 6 呢?

triple.call(2) 才是 6 啊!

不明白楼主哪里不明白

#2 楼 @googya 哦 这个是从书上看得例子 但是运行结果和书上不符 环境都是 ruby1.8.7 的 所以想问下 是不是我那里想错了 因为我自己开始也是得到的 4 这个数字的 只是求证下

@yangman_wenzhu 书上的例子是 1.8.7 的,在 1.8.7 上的 block 中变量的机制与 1.9.3 中不同;

#4 楼 @googya 哦 其实 用程序测出来的 应该就是最有权威的 呵呵 谢谢你的耐心讲解

需要 登录 后方可回复, 如果你还没有账号请 注册新账号