なかだです。 At Thu, 17 Jun 2004 13:42:04 +0900, Nobuyoshi-Nakada wrote in [ruby-dev:23706]: > > 基本的にはこれでいいんじゃないでしょうか。私自身はPROC_TMASK > > のところに「$SAFEを保存しないフラグ」を用意する方法を考えて > > いましたが。 > > こういう感じ? 最初元のProcにも影響しちゃうんじゃないかと思って > [ruby-dev:23697]のようにしたんですが、cloneしてましたね。こっち > のがシンプルでよさそう。 うっかりしてましたが、この二つでは微妙に動作が違います。 $ cat proc_safe.rb class X P = proc {$SAFE} define_method(:safe, P) end $SAFE = 1 x = X.new m = x.method(:safe) puts "Proc#call = #{X::P.call}" puts "define_method = #{x.safe}" puts "Method#call = #{m.call}" puts "Method#to_proc = #{m.to_proc.call}" $ ./miniruby-23697 proc_safe.rb Proc#call = 0 define_method = 1 Method#call = 1 Method#to_proc = 0 $ ./miniruby-23706 proc_safe.rb Proc#call = 0 define_method = 1 Method#call = 1 Method#to_proc = 1 一度メソッドにした以上、再びProcに戻してもメソッドの動作に従う べきでしょうか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦