0

在下面的代码中,我正在阅读闭包,但想知道如果函数中有多个 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

此外,为什么以下无效?编辑:删除,愚蠢的错误。谢谢楼下:)

4

1 回答 1

1

lambda 是一个闭包,这意味着其中的代码在调用 lambda 之前不会运行。您创建了第一个 lambda,但在您执行 lambda.call 之前,不会执行块中的任何代码。

最后一个 lambda 被返回,所以它就是所谓的。这是执行的一个小时间表:

test = n_times(2)
puts test.call(3)
  1. n_times 调用(2 传入)
  2. 在 n_times 范围内创建的 lambda 1
  3. lambda 2 创建“
  4. lambda 2 被隐式返回(最后一个值),存储在test
  5. test.call(5)- 传入 5 调用第二个 lambda
  6. 打印“第二次调用”,并返回 -1

不再相关:

lambda {|t| puts |t|}

应该

lambda {|t| puts t}
于 2013-05-12T03:18:26.300 回答