instance method Fiber#raise

raise -> object[permalink][rdoc][edit]
raise(message) -> object
raise(exception, message = nil, backtrace = nil) -> object

selfが表すファイバーが最後に Fiber.yield を呼んだ場所で例外を発生させます。

Fiber.yield が呼ばれていないかファイバーがすでに終了している場合、 FiberError が発生します。

引数を渡さない場合、RuntimeError が発生します。 message 引数を渡した場合、message 引数をメッセージとした RuntimeError が発生します。

その他のケースでは、最初の引数は Exception か Exception のインスタンスを返す exception メソッドを持ったオブジェクトである必要があります。この場合、2つ目の引数に例外のメッセージを渡せます。また3つ目の引数に例外発生時のスタックトレースを指定できます。

[PARAM] message:
例外のメッセージとなる文字列です。
[PARAM] exception:
発生させる例外です。
[PARAM] backtrace:
例外発生時のスタックトレースです。文字列の配列で指定します。


f = Fiber.new { Fiber.yield }
f.resume
f.raise "Error!" # => Error! (RuntimeError)
ファイバー内のイテレーションを終了させる例

f = Fiber.new do
  loop do
    Fiber.yield(:loop)
  end
  :exit
end

p f.resume              # => :loop
p f.raise StopIteration # => :exit