Fiber を使ってみる
Fiber とは?
Ruby には、Fiber というコルーチン用のクラスがあります。
コルーチンとは、いったん処理を中断した後、続きから処理を再開することができる仕組みのことです。
言語によっては、async/await
の非同期処理のことをコルーチンと呼ばれることがありますが、Ruby の Fiber は yield/resume
で処理を中断/再開します。
Fiber を作成するには、Fiber.new
を実行します。
Fiber.new
を実行しただけでは、まだ処理は開始されません。
REPL を使って試してみましょう。
@fiber = Fiber.new do
Godot.emit_signal :fiber, 'started'
Fiber.yield
Godot.emit_signal :fiber, 'resumed'
end
Output
=> "#<Fiber:0x1ab31c76030 (created)>"
処理を開始するには、resume
を実行します。
@fiber.resume
Output
[ fiber ] signal emitted: 'started'
=> <null>
Fiber.yield
があれば、処理はそこで中断されます。再開するには再度 resume
を実行します。
@fiber.resume
Output
[ fiber ] signal emitted: 'resumed'
=> true
Fiber.yield の引数と戻り値について
Fiber.yield
の引数は、resume
した際の戻り値になります。
@fiber = Fiber.new do
value = Fiber.yield 'started'
Godot.emit_signal :fiber, value
end
@fiber.resume
Output
=> "started"
resume
に渡した引数は、Fiber.yield
の戻り値になります。
@fiber.resume 'hello'
Output
[ fiber ] signal emitted: "hello"
=> true
コルーチンを使うことで、任意のタイミングで処理を中断/再開ができるので、例えば会話ダイアログが作成できます。
次の章では、Fiber を使って会話ダイアログを表示するサンプルを一緒に作ってみましょう。