2011年9月8日木曜日

evalのように文字列をlambdaで実行する


中の人です。
eval用として突っ込まれている文字列を
lambdaのようにreturnを書かせろという用途で・・・。
本来、evalなのにreturnを書いてしまった!もう手遅れ!
なんとかして!Procのnextみたいなこと出来ないのか!

普通、returnはできない。
code = "puts 'before';return false;puts 'after'"
eval code
#→LocalJumpError
def test
code = "puts 'before';return false;puts 'after'"
#eval code #return しているのでtestを抜けてしまう。
lmd = lambda {eval code}
lmd.call
puts 'important Process'
end
test

eval恐いよ。

0 件のコメント:

コメントを投稿