原です。 > raise 文字列 > raise 例外 > raise 例外, 文字列 > raise 例外クラス, 文字列 この仕様は ruby の中で最も複雑なものの一つですね。というか それだけ多くの機能が込められているわけだけど。 ところで、Thread#raise ですが、まず -----^ test1.rb #!/usr/local/bin/ruby x = Thread.start {sleep} x.raise -----$ test1.rb で、 ./test1.rb:3:in `raise': Wrong # of arguments (0 for 1) from ./test.rb:3 となって、仕様が関数の raise とくい違っています。次に、 -----^ test2.rb #!/usr/local/bin/ruby x = Thread.start {} x.raise "test" -----$ test2.rb の様に死んだスレッドに raise すると、処理が返ってこなくな ります。更に、カレントスレッドに raise すると、 -----^ test3.rb #!/usr/local/bin/ruby x = Thread.current x.raise "test" -----$ test3.rb ./test3.rb:3: [BUG] unsaved context IOT trap/Abort ということになります。 あと、例の timeout イテレータですが、TimeoutError を該当 スレッドで捕捉できないことがたまにあって、、、これは調査 中です。