Ruby 4.0 リファレンスマニュアル

instance method Thread#raise

raise -> ()[permalink][rdoc][edit]
raise(message, cause: $!) -> ()
raise(error_type, message = nil, traceback = nil, cause: $!) -> ()
(?String message, ?cause: Exception?) → nil
(_Exception, ?_ToS message, ?Array[Thread::Backtrace::Location] | Array[String] | nil backtrace, ?cause: Exception?) → nil

自身が表すスレッドで強制的に例外を発生させます。

引数を渡さない場合は RuntimeError を発生させます。message だけを渡した場合は、message をメッセージとした RuntimeError を発生させます。引数の意味は Kernel?.raise と同じです。

[PARAM] error_type:
Kernel?.raise を参照してください。
[PARAM] message:
Kernel?.raise を参照してください。
[PARAM] traceback:
Kernel?.raise を参照してください。省略した場合は、例外が発生した時点でのそのスレッドのバックトレースになります。
[PARAM] cause:
現在の例外($!)の代わりに Exception#cause に設定する例外を指定します。Exception オブジェクトまたは nil を指定できます。Ruby 4.0 から指定できます。
Thread.new {
  sleep 1
  Thread.main.raise "foobar"
}

begin
  sleep
rescue
  p $!, $@
end

=> #<RuntimeError: foobar>
   ["-:3"]
例: cause: を指定する
th = Thread.new do
  begin
    sleep
  rescue => e
    e
  end
end
sleep 0.1 until th.status == "sleep"
th.raise(ArgumentError, "foo", cause: RuntimeError.new("bar"))
e = th.value
p e        # => #<ArgumentError: foo>
p e.cause  # => #<RuntimeError: bar>