Hi, calling Fiber.yield without being in the context of a created
Fiber raises an error:
can't yield from root fiber (FiberError)
It makes sense, of course. However I would like to know how to check
whether I'm into the root Fiber or not. The documentation doesn't
provide a method for this purpose. Is there a way? I expected
something like Fiber#root?.
Thanks a lot.
···
--
Iñaki Baz Castillo
<ibc@aliax.net >
7stud
(7stud --)
8 April 2011 18:37
2
How about catching the exception?
begin
Fiber.yield
rescue FiberError
puts "In root fiber..."
puts "... so I am going to do something different here."
end
puts 'executing rest of program'
--output:--
In root fiber...
... so I am going to do something different here.
executing rest of program
Or, maybe do something like this:
···
--
Posted via http://www.ruby-forum.com/ .
7stud
(7stud --)
8 April 2011 18:56
3
7stud -- wrote in post #991816:
For example:
require 'fiber'
root_fiber = Fiber.current
f = Fiber.new do
if Fiber.current.eql?(f)
puts 'not root fiber'
else
puts 'root fiber'
end
Fiber.yield "hello world"
end
f.resume
--output:--
not root fiber
root fiber
Instead, make that:
require 'fiber'
root_fiber = Fiber.current
f = Fiber.new do
if Fiber.current.eql?(root_fiber)
puts 'root fiber'
else
puts 'not root fiber'
end
Fiber.yield "hello world"
end
f.resume
if Fiber.current.eql?(root_fiber)
puts 'root fiber'
else
puts 'not root fiber'
end
···
--
Posted via http://www.ruby-forum.com/\ .
You could even use #equal ? instead of #eql ? just in case #eql ? is overridden.
Kind regards
robert
···
On Mon, Apr 11, 2011 at 9:30 AM, Iñaki Baz Castillo <ibc@aliax.net> wrote:
2011/4/8 7stud -- <bbxx789_05ss@yahoo.com>:
Instead, make that:
require 'fiber'
root_fiber = Fiber.current
f = Fiber.new do
if Fiber.current.eql?(root_fiber)
puts 'root fiber'
else
puts 'not root fiber'
end
Fiber.yield "hello world"
end
f.resume
if Fiber.current.eql?(root_fiber)
puts 'root fiber'
else
puts 'not root fiber'
end
Great solution
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/