e$B$3$s$P$s$O!"e(Bsheepman e$B$G$9!#e(B
Fiber#yield e$B$,Ej$2$kNc30$,!"%P%C%/%H%l!<%9$K>pJs$r4^$s$G$J$$$N$Ge(B
e$B%G%P%C%0$NLr$KN)$A$^$;$s!#$I$3$G%(%i!<$,5/$-$?$+J,$+$k$h$&$K$G$-$J$$e(B
e$B$G$7$g$&$+!#Nc$($P0J2<$_$?$$$J46$8$G!#e(B
$ cat r.rb
class Fiber
def self.new2(&b)
self.new {
begin
b.yield
rescue => e
e
end
}
end
def yield2
ret = self.yield
if ret.is_a? Exception
raise ret
else
ret
end
end
end
def raize
raise StandardError
end
f = Fiber.new2 do
raize
end
f.yield2
$ ruby-1.9 -v r.rb
ruby 1.9.0 (2007-06-10 patchlevel 0) [i686-linux]
r.rb:23:in raise': StandardError (StandardError) from r.rb:23:in
raize’
from r.rb:27:in block in <main>' from r.rb:5:in
yield’
from r.rb:5:in `block in new2’