2011-03-16 15 views
5

Używam ruby1.9.2p180 (2011-02-18 wersja 30909) i686-linux. Fiber#alive? zwraca niezdefiniowany błąd:Fiber # alive? nie zdefiniowany

fiber = Fiber.new{puts 'hello'} 
fiber.alive? 
=> undefined error 

innych metod, na przykład Fiber#resume, Fiber.yield wydają się działać dobrze. Co jest nie tak?

Nawiasem mówiąc, jaka jest różnica między Fiber#resume i Fiber#transfer?

Odpowiedz

4

Zapomniałeś require 'fiber' pierwsze:

f = Fiber.new { puts 'hello' } 
    => #<Fiber:0x896109c> 

f.alive? 
    # NoMethodError: undefined method `alive?' for #<Fiber:0x896109c> 
    #  from (irb):2 
    #  from /home/johnf/.rvm/rubies/ruby-1.9.2-rc1/bin/irb:17:in `<main>' 

require 'fiber' 
    => true 

f.alive? 
    => true 
+2

Dzięki. Nie zapomniałem tego, nie wiedziałem tego. Nie powiedział tego w dokumencie. Mówi, że musisz to zrobić dla 'Fibre.current', ale nie mówi tak dla' Fibre # alive? '. – sawa

+0

Prawdopodobnie to niedopatrzenie związane z dokumentacją. W razie wątpliwości przeczytaj kod. :) –

+2

Tak więc wymaganie światłowodu jest wymagane tylko dla niektórych, nie wszystkich metod Fibera? –