【Ruby3.x】Fiber::resume()メソッドの使い方
resumeメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
resumeメソッドはRubyのFiberクラスに属し、停止中のファイバーの実行を再開するメソッドです。ファイバーは、プログラムの実行を途中で一時停止し、必要に応じてその実行を再開できる軽量なコルーチン機構です。resumeメソッドは、この一時停止されたファイバーに制御を渡し、そのファイバーのブロック内の処理を再開させます。
初めてファイバーを起動する場合、resumeメソッドを呼び出すことで、ファイバーのブロックの最初から実行が開始されます。また、ファイバー内でyieldメソッドが呼び出され、一旦実行が中断された場合、その後に再びresumeメソッドを呼び出すことで、中断されたyieldの次の行から処理が再開されます。
resumeメソッドには任意の引数(*args)を渡すことができ、これらの引数は、ファイバーのブロックが初めて実行される際にはブロック引数として渡されます。yieldによって中断されたファイバーを再開する場合、resumeに渡された引数はyieldメソッドの戻り値としてファイバー内部に渡されます。resumeメソッド自体の戻り値は、ファイバーのブロックが最後に評価した結果、またはファイバー内部でyieldされた値です。
注意点として、すでに実行が完了し、終了したファイバーに対してresumeを呼び出すと、FiberErrorが発生します。resumeメソッドは、非同期処理やイテレータの実装など、実行フローを細かく制御したい場面で非常に有用です。
構文(syntax)
1f = Fiber.new do |arg_on_start| 2 arg_on_resume = Fiber.yield("value_from_yield") 3 "value_on_end" 4end 5 6returned_from_first_resume = f.resume("arg_to_start") 7returned_from_second_resume = f.resume("arg_to_resume")
引数(parameters)
*rest
- rest: Fiber.resume に渡したい任意の引数。Fiber.yield に渡された値を受け取ります。
戻り値(return)
Object
Fiberの実行を再開し、その実行中にyieldされた値を返します。