[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