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
Tôi mong đợi r = 3 nhưng hóa ra là r = 4. Nếu tôi xóa mã đảm bảo, r = 3 được mong đợi. Tại sao lại như vậy?Trả lại Ruby trong khối lợi nhuận được gọi từ phương thức có đảm bảo
def foo
puts "in foo"
s = yield
puts "s = #{s}"
return 2
end
r = bar
in foo
in bar block
=> 3
[blog] này (http://railsware.com/blog/2012/11/20/yield-gotcha-in-ruby-blocks/) được cố gắng giải thích cho bạn .. những gì đang xảy ra .. –