From: Koji Arai Date: 2003-10-06T15:46:41+09:00 Subject: [ruby-dev:21519] Re: eval BEGIN/END at runtime 新井です。 In message "[ruby-dev:21517] Re: eval BEGIN/END at runtime" on 06 Oct 2003 15:20:48 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > 「RubyのENDは実行時に評価される」のがキーです。メソッド内に > ENDがあるとそのメソッドが呼ばれた数だけEND procが登録されま > す。それは多分意図とは違うでしょう。意図通りならat_exitを使 > えばよいことですし。 となると eval じゃない場合に許される理由はなんでしょう? def foo END { p "foo" } end foo foo => ruby 1.8.0 (2003-10-05) [i586-linux] "foo" END の登録を1回きりにする保証が取れない場合にエラーにしたい なら、以下をこそ禁止すべきな気もしますし。まだよくわかりませ ん。 # 自分の首を絞めるのを止めてくれるのは ruby らしいのか、らし # くないのか。 def foo eval 'END { p "foo" }' end foo foo => ruby 1.8.0 (2003-10-05) [i586-linux] "foo" "foo" さらに言うと END の登録を実行時にした理由も知りたい気がしま すが、教えて君が過ぎますでしょうか?(^^; # 休みを取るとうるさくて困りますね。私てば(汗 > |ネストした END が最後に回されるのも仕様でしょうか? > |なんとなく、35421 を期待したのですがそうじゃないとしても > |別に困りませんが。 > > これも「実行時」の結果です。仕様だと思ってください。 > 仕様と言われれば反対する理由はありませんので、気持良く納得です。 -- 新井康司 (Koji Arai)