From: Motomichi Matsuzaki <mzaki / e-mail.ne.jp>
Subject: [ruby-list:40785] nil以外のときメソッドを呼ぶ
Date: Wed, 27 Apr 2005 13:43:03 +0900

るびきちです。

> タブ区切りテキストで与えられるデータを解釈しようとしているのですが、
> フィールドの数が不定の場合、
> 
> 例:
>     array = line.chomp.split("\t")
>     float = array.shift.to_f
>     int   = array.shift.to_i
>     str   = array.shift.sub(/^XX/, '')

僕なら構造体をを派生させたクラスを作成します。
とはいえ、最大フィールド数が決まってる場合だけですが。


splitされたそれぞれの文字列において、
CONVERTERで指定したメソッドを順次呼出します。

class String
  def strip_XX
    sub(/^XX/, '')
  end
end


class TextData < Struct.new(:float, :int, :str)
  CONVERTER = [:to_f, :to_i, :strip_XX]
  def self.[](input)
    obj = new
    input.chomp.split(/\t/).each_with_index do |x, i|
      obj[i] = (x && x.__send__(CONVERTER[i]))
    end
    obj
  end
end

p TextData[ "1\t2\t3" ]
p TextData[ "1.0\t2\t"]
p TextData[ "1\t2\tXXfoo" ]



るびきち☆
http://www.rubyist.net/~rubikitch/ ←Ruby大衆化計画@移転