ごとけんです

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