小编use*_*207的帖子

从带有ensure的方法调用的yield块返回Ruby

def foo
  puts "in foo"
  s = yield
  puts "s = #{s}"
  return 2
ensure
  puts "in ensure"
  return 1
end

def bar
  foo do
    puts "in bar block"
    return 3
  end
  return 4
end


[36] pry(main)> r = bar
in foo
in bar block
in ensure
=> 4
Run Code Online (Sandbox Code Playgroud)

我期望r = 3,但事实证明它是r = 4.如果我删除了确保代码,则预期r = 3.为什么?

def foo
  puts "in foo"
  s = yield
  puts "s = #{s}"
  return 2
end

r = bar
in foo
in bar block
=> …
Run Code Online (Sandbox Code Playgroud)

ruby

5
推荐指数
1
解决办法
779
查看次数

标签 统计

ruby ×1