ごとけんです
def xmp(arg) # prints expample code and the result line by line
__res__ = []
eval arg.gsub(/^(.*)\n/){"__res__ << (#{$1}).inspect;"}
arg.split(/\n/).each_with_index{|l,i|
print "#{l}\n ==> #{__res__[i]}\n"
}
end
ruby 初めての人に動作を説明するために小さいコードの
動作を提示したいとき、p や eval.rb や irb を使えば
良いのは分かってます。
んが、 irb --symple-prompt の出力がちょっと気に
入らないけど、こないだ irb をいぢる時間が無くて、
どうせ簡単なコードにしか使わないやと思って
上のような簡単なものを書いてみました。
そしたら相当気に入ったので ^^; 見せびらかしに来ました ^^;;;
いちおう説明すると引数は改行文字で区切られた
式の列です。各行で式が完結してる必要があります。
例えば 「xmp "a = Math::PI\n(3..4) === a\n"」は
a = Math::PI
==> 3.14159
(3..4) === a
==> true
となります。
# 要するに授業の板書とレジメの書き方を揃えるためなんです ^^;;
# もし irb で「ほぼ同じ出力」ができればそっちが良いに
# 決まってますが設定に挫折しました /(-_-;
# あと、irb でオプションが --symple-prompt になってます。
# ^
# --simple-prompt ですよね。もう直ってますか?
^
なお典型的には以下のように使います。
#------------------------------------ ここから
print "例1\n"
xmp <<EXAMPLE
foo = "こんちわ"
bar = foo
foo2 = foo.dup
bar.sub!("ん", "にゃにゃ")
bar
foo
foo2
EXAMPLE
print "\n例2\n"
xmp <<EXAMPLE
a = "The moon Fly"
b = [a.split, "TO", "Me"]
b = b.flatten
b.sort.join(" ").capitalize
EXAMPLE
#------------------------------------ ここまで
をファイルにして実行すると以下のようになります:
例1
foo = "こんちわ"
==> "こんちわ"
bar = foo
==> "こんちわ"
foo2 = foo.dup
==> "こんちわ"
bar.sub!("ん", "にゃにゃ")
==> "こにゃにゃちわ"
bar
==> "こにゃにゃちわ"
foo
==> "こにゃにゃちわ"
foo2
==> "こんちわ"
例2
a = "The moon Fly"
==> "The moon Fly"
b = [a.split, "TO", "Me"]
==> [["The", "moon", "Fly"], "TO", "Me"]
b = b.flatten
==> ["The", "moon", "Fly", "TO", "Me"]
b.sort.join(" ").capitalize
==> "Fly me to the moon"
-- gotoken