From: ABE Shigeru Date: 2001-05-29T13:51:26+09:00 Subject: [ruby-list:29861] Re: "" で行われる展開を eval 無しで…  阿部です。  どうも、書き方が悪かったですね。  メソッド foo が定義されているとき、 vprint "#{foo}"  と書くと、foo が呼び出されて、その結果が文字列中に埋め込ま れますよね。それで、vprint というメソッドが $OPT_v が TRUE のときだけ渡されたメッセージを表示するというメソッドだとする と、$OPT_v が FALSE の時でも foo というメソッドは呼び出され てしまいます。  もし foo がとても時間のかかるメソッドだとすると、使われな いのに重い処理を行って、その結果を結局捨ててしまうことになり ますよね? ですから、本当に使われるときにだけ foo を呼び出 させたいのです。  そうすると、 vprint '#{foo}'  としておいて、 def vprint (*arg) arg.collect! do |i| eval( "\"#{i}\"" ) end $stderr.print( *arg ) if $OPT_v end  とする方法があると思うのですけれども、eval するというのが どうも気に入らないのです…。できるのだから我慢しろ、と言われ ればその通りなのですけど。  他に方法はないのかなと思いまして、お聞きした次第です。 -------- 阿部 茂 Homepage : http://homepage1.nifty.com/blackpoint/ e-mail : shiger-a@nifty.com (@nifty)