From: gotoken@... (GOTO Kentaro) Date: 1998-06-24T07:18:39+09:00 Subject: [ruby-list:8489] xmp ごとけんです 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 < "こんちわ" 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