Ruby 1.9でeval()
を使用して、ルビコードをインタラクティブな方法でテストしたいと思います。ずっと前(Ruby 1.4を中心に)私はこの機能を提供するインターネット上できちんとしたスクリプトを見つけました。ここでは単純化して低減されたバージョン:原因eval()
の変更セマンティクスにただしていないもう1.9で、Ruby 1.9でeval()を使用してRubyコードスニペットをテストする
ruby> str = "a:b:c"
"a:b:c"
ruby> str.split /:/
["a", "b", "c"]
ruby>
このスクリプトは、Rubyの1.8まで正常に動作します:
line = ''
$stdout.sync = true
print "ruby> "
while true
input = gets
if input
line = input
else
break if line == ''
end
begin
print eval(line).inspect, "\n"
rescue ScriptError, StandardError
$! = 'exception raised' unless $!
print "ERROR: ", $!, "\n"
end
break if not input
line = ''
print "ruby> "
end
は、私のような何かをすることができました。今私はstr
のようなローカル変数をもう作れません。代わりに、私は、次の明白なメッセージが表示されます:
ERROR: undefined local variable or method `str' for main:Object
はeval()
のこの動作を修正または回避する方法はありますか?私はバインディングについて何かを読んだことがありますが、ここでそれをどうやって行うのか分かりません。
もちろん、irb
がありますが、そのツールでは"abc#{var}def"
のようなポンド記号を使用できません。もし私がしようとすると、irb
コメント全体の行を。
「abc#{var} def」はirbで動作します。 – Dogbert