1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
def u *a, &p
puts 'u.begin'
$p = p
v
ensure
puts 'u.finally'
end
def v
puts 'v.begin'
raise
rescue
w &$p # y does retry the try-block
ensure
puts 'v.finally'
end
def w &b
puts 'w.begin'
y &$p # return value == retry singleton && block == passed block ==> do retry
ensure
puts 'w.finally'
end
def y
puts 'y.begin'
yield # return reason == retry ==> do retry
ensure
puts 'y.finally'
end
def foo
puts 'foo.begin'
u puts('Y') do
puts 'outer-block.begin'
yield
puts 'outer-block.end'
end
puts 'foo.end'
end
$i = true
foo do
puts 'inner-block.begin'
if $i then
$i = false
puts 'retrying'
retry
end
puts 'inner-block.end'
end
|