【问题标题】:Yet another proc vs. lambda discussion另一个 proc 与 lambda 的讨论
【发布时间】:2011-12-04 17:45:24
【问题描述】:

我认为当您在方法中调用 proc 时,proc 的返回值会触发从调用 proc 的 out 块上下文返回。当我调用test(a_block) 时,我觉得不应执行puts "after the block",因为proc 有一个返回值。此外... test(a_block)test(b_block) 的行为完全相同。我认为这里应该有所不同?

a_block = Proc.new do
  puts "in the Proc"
  55
end

b_block = lambda do 
  puts "in the lambda"
  66
end

def test(block)

  puts "in test"
  puts block.call
  puts "after the block"
  99 
end

puts test(a_block)
puts test(b_block)

【问题讨论】:

标签: ruby lambda proc-object


【解决方案1】:

返回值

你的第一句话应该读作

返回语句

使用return 66return 55,你会看到光明!

可以在这里找到关于 Ruby 闭包的精彩调查:http://innig.net/software/ruby/closures-in-ruby.rb

【讨论】:

    【解决方案2】:

    根据this question,它们在您的示例中的行为应该完全相同。唯一显着的区别是lambda 在调用时会检查参数的数量,而Proc.new 会吐出一个未定义的方法错误。

    请注意,我不是 Ruby 专家。我阅读了您的问题,然后单击了侧边栏中看起来很有帮助的第一个“相关”链接。以后请仔细搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      相关资源
      最近更新 更多