type=class
superclass=Object
included=
extended=
library=_builtin

Υץꥨץƥ֤ʷ̥å(ʲեСȸƤ)󶡤ޤ
¾θǤ coroutine 뤤 semicoroutine ȸƤФ뤳Ȥ⤢ޤ
[[c:Thread]] Ȱ㤤桼٥륹åɤȤƼƤޤ

[[c:Thread]] 饹ɽåɤȰ㤤Ū˻ꤷʤ¤
եСΥƥȤڤؤޤ
ޤեСϿƻҴطޤFiber#resume ƤեСƤˤʤ
ƤФ줿եСҤˤʤޤƻҴط褦(㤨
ʬοƤοƤΥեСڤؤ褦ʽ)ϤǤޤ
㳰 FiberError ȯޤ
Ǥ뤳Ȥ 
 * Fiber#resume ˤҤإƥȤڤؤ
 * Fiber.yield ˤƤإƥȤڤؤ
̤ǤοƻҴطưŪʤΤǤ
ƥեСإƥȤڤؤǲäޤ

ʤɸźե饤֥ [[lib:fiber]]  require 뤳Ȥˤꡢ
ƥȤڤؤ¤Τʤ [[m:Fiber#transfer]] Ȥ褦ˤʤޤ
ǤդΥեС˥ƥȤڤؤ뤳ȤǤޤ

եСλȤοƤ˥ƥȤڤؤޤ

=== 㳰

եС¹㳰ȯ硢ƥեС㳰Ťޤ

:
 f = Fiber.new do
   raise StandardError, "hoge"
 end
 
 begin
   f.resume     # Ǥ StandardError ȯ롣
 rescue => e
   p e.message  #=> "hoge"
 end

=== 硼ȥ塼ȥꥢ

եСϽΤݥȤ¾Υ롼˥ƥȤڤؤޤΥݥȤƳ
ȤŪΤ˻Ȥޤ
[[m:Fiber.new]] ˤͿ줿֥åȤȤ˥եСޤ
եСФ [[m:Fiber#resume]] Ƥ֤ȤˤꥳƥȤڤؤޤ
ҥեСΥ֥å [[m:Fiber.yield]] Ƥ֤ȿƤ˥ƥȤڤؤޤ
Fiber.yield ΰƤǤ Fiber#resume ֤ͤˤʤޤ
 f = Fiber.new do
   n = 0
   loop do
     Fiber.yield(n)
     n += 1
   end
 end
 
 5.times do
  p f.resume
 end
 
 #=> 0
     1
     2
     3
     4

ʲƥ졼ƥ졼ѴǤ
º [[c:Enumerator]]  Fiber ѤƼƤޤ

 def enum2gen(enum)
   Fiber.new do
     enum.each{|i|
       Fiber.yield(i)
     }
   end
 end
 
 g = enum2gen(1..100)
 
 p g.resume  #=> 1
 p g.resume  #=> 2
 p g.resume  #=> 3

=== 

Thread 饹ɽåɴ֤ޤեСڤؤϤǤޤ
㳰 FiberError ȯޤ

 f = nil
 Thread.new do
   f = Fiber.new{}
 end.join
 f.resume
 #=> t.rb:5:in `resume': fiber called across threads (FiberError)
        from t.rb:5:in `<main>'
