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 哦 其实 用程序测出来的 应该就是最有权威的 呵呵 谢谢你的耐心讲解