“屈服”施放lambda到触发器吗?

时间:2014-11-26 18:26:36

标签: ruby lambda yield proc

我正在学习Ruby,在测试procs和lambdas的行为时,我写了这段代码:

def test_f(&a_block)
  puts "in test_f"
  yield 7
  puts "still in test_f"
end

def test_f_2(&a_block)
  puts "in test_f_2"
  a_block.call(7)
  puts "still in test_f_2"
end

lam = lambda do |i|
  puts "lambda #{i}"
  return "lambda #{i}"
end

test_f_2(&lam)
test_f(&lam)

运行它的结果是:

in test_f_2
lambda 7
still in test_f_2
in test_f
lambda 7
test.rb:17: in 'block in <main>': unexpected return <LocalJumpError>
        from test.rb:3:in 'test_f'
        from poop.rb:21:in '<main>'

我有两个问题:

  1. 这是否意味着使用yield'将'lambda'转换为proc,因为只有在使用yield时才尝试返回会导致错误?
  2. 在什么情况下不允许从过程中返回?
  3. 我已经读过“当创建上下文不再存在时,调用包含返回的proc是不可能的”,但这里的上下文是全局的,所以我说{的创建上下文没有意义{1}}不再存在。但是,将lam的整个创建括起来并在另一个函数中调用测试函数可以防止出现任何错误消息,这使我得出结论,正在运行的标准是对包含返回的proc的任何调用必须是从您可以返回的上下文中。

    我是对的吗?

0 个答案:

没有答案