[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000246] Re: NumArray prototype in ruby



In message "[dennou-ruby:000241] Re: NumArray prototype in ruby"
    on 00/02/07, Masato Shiotani <shiotani@xxxxxx> writes:

>これどうやって使うの?
>
>ごとけんさんのメールを切り取り, #! /usr/local/bin/ruby つけて実行可能
>にし, 
>
>	% xmp.rb numarray.rb
>
>とかやっても, 何も出力されません...

あ、えーっと raa から手繰ってもらうと分かるんですが、

xmp <<-EOS
  a = "The moon Fly"
  b = [a.split, "TO", "Me"]
  b = b.flatten
  b.sort!
  b.join(" ").capitalize
EOS

とすると、

  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!
    #=> ["Fly", "Me", "TO", "The", "moon"]
  b.join(" ").capitalize
    #=> "Fly me to the moon"

と出力されます。if __FILE__ == $0 にもぐり込ませて使うのが
主な用途です。

-- gotoken

# 例外補足と複数行出力、およびフォーマットカスタマイズをしてみました。

  def xmp(arg, fmt = "%s\n    #%s\n", sep="\n    #   ")
    if fmt
      fmt = fmt.to_s
      eval("__sep__ = #{sep.inspect}; __res__ = []", TOPLEVEL_BINDING)
      eval(arg.gsub(/^(.*)\n?/){
	     %Q|
             begin
	       __res__ << "=> " + (#{$1}).inspect.gsub(/\n^/, __sep__);
             rescue
               __res__ << "!! " + $!;
             end|}, TOPLEVEL_BINDING)
      arg.split(/\n/).each_with_index{|l,i|
	(puts "\n" ; next) if l =~ /^$/
	print format(fmt, l, eval("__res__", TOPLEVEL_BINDING)[i])
      }
    else
      print arg; eval arg
    end
  end