在下面的代码中,我正在阅读闭包,但想知道如果函数中有多个proc对象会发生什么。所以当函数被调用时,只调用了最后一个lambda ..我在下面测试过。 (互动:http://labs.codecademy.com/BAZX#:workspace)
def n_times(thing)
lambda {|n| puts "first called"; thing * n}
lambda {|n| puts "second called"; thing - n}
end
test = n_times(2)
puts test.call(3)
为什么跳过第一个lambda?
puts n_times(3).call(2) => second called 1
Moreso,为什么以下无效? 编辑:删除,愚蠢的错误。谢谢以下:))
答案 0 :(得分:1)
lambda是一个闭包,意味着它内部的代码在调用lambda之前不会运行。您创建了第一个lambda,但在执行lambda.call之前,块中的所有代码都不会执行。
返回最后一个lambda,因此它就是所谓的。这是执行的一个小时间线:
test = n_times(2)
puts test.call(3)
test
test.call(5)
- 第二个lambda在传入不再相关:
lambda {|t| puts |t|}
应该是
lambda {|t| puts t}