From: Yoshinori Toki Date: 1999-07-31T23:23:41+09:00 Subject: [ruby-list:15796] Re: ERb について 土岐です。 # このメールを書いているうちに、咳さんのメールが来てしまった(汗)。 # でもせっかく調べて書いたので ruby-list に出しておきます。 Date: Sat, 31 Jul 1999 16:00:31 +0900 Subject: [ruby-list:15787] ERb について 松尾尚典 wrote... 松尾尚典> ERbの外で発生した例外を、ERbオブジェクトが再発生させているよ 松尾尚典> うなのですが、これはそういうものなのでしょうか? それとも僕の 松尾尚典> 勘違い? 松尾尚典> $ /add/ruby/ruby t.rb 松尾尚典> # 松尾尚典> "ERbの外で発生した例外を、ERbが再発生? " わたしの環境ではなんにも起こりませんでした。 $ ruby -v ruby 1.3.6 (1999-07-28) [i586-linux] $ ruby t.rb $ それで、もしやと思って ruby 1.2.6 で試してみると、同じ結果になりました。 $ ruby-1.2 -v ruby 1.2.6(99/07/15) [i586-linux] $ ruby-1.2 t.rb # "ERbの外で発生した例外を、ERbが再発生? " それで、原因を探るために rescue 節で `p $@' を入れてバックトレースを表 示させてみました。 $ ruby-1.2 test_erb.rb # ["test_erb.rb:8", "/home/toki/ruby/lib/strio.rb:66:in `value'", "/home/toki/ruby/lib/strio.rb:66:in `as_stdout'", "/home/toki/ruby/lib/erb.rb:118:in `result'", "test_erb.rb:10"] "ERbの外で発生した例外を、ERbが再発生? " バックトレースを順番に追ってみたところ、例外が再発生しているのでなんと なく Thread#value が怪しいんではないかと思って、以下のようなスクリプト を書いて試してみました。 require "thread" begin begin raise "out of Thread" rescue t = Thread.new{} t.value end rescue p $! p $@ p "Thread の外で発生した例外を、Thread#value が再発生?" end $ ruby-1.2 test_thread.rb # ["test_thread.rb:7", "test_thread.rb:10:in `value'", "test_thread.rb:10"] "Thread の外で発生した例外を、Thread#value が再発生?" このように同じような結果が出たので、どうやら原因は ruby 1.2 の Thread#value がおかしい(?)せいのようです。 このさいだから、ruby 1.3 にアップグレードしてはいかがでしょう。 ---------------------------------------------------------------------- 土岐 仁謙 神戸大学物理高エネ研 M2 URL: http://www3.phys.sci.kobe-u.ac.jp/~toki/index.html PGP fingerprint = D0 A8 90 AB 73 F8 34 FE CE CA DB BF 01 30 C0 35