From: Motomichi Matsuzaki Date: 2005-04-27T13:43:03+09:00 Subject: [ruby-list:40785] nil以外のときメソッドを呼ぶ 松崎と申します。 ruby 1.8.2 を使っております。 タブ区切りテキストで与えられるデータを解釈しようとしているのですが、 フィールドの数が不定の場合、 例: array = line.chomp.split("\t") float = array.shift.to_f int = array.shift.to_i str = array.shift.sub(/^XX/, '') : : このような処理をさせると当然、 対応するフィールドがない場合 float に 0.0 や int に 0 が代入され、 str なら例外で落ちてしまいます。 しかし array.shift をいちいち代入して条件分岐させると フィールド数が多い時に見づらくなってしまいます。 ないフィールドには nil が代入されるための綺麗な解決法はないでしょうか? 自分で思いついたのは、 class Object def nonnil self && yield(self) end end としておいて、 str = array.shift.nonnil{|x| x.sub(/^XX/, '')} などのようにすることなのですが、 もっとシンプルに書く方法はないでしょうか? 逐一 def nil_or_sub(*p) self && self.sub(*p) end などとすれば str = array.shift.nil_or_sub(/^XX/, '') と書けますが、毎回定義するのも煩雑です。 str = array.shift.nonnil?.sub(/^XX/, '') のように書けたら嬉しいのですが、これは多分文法上不可能なんですよね? お知恵を貸して頂ければ幸いです。 -- Motomichi Matsuzaki, PhD Dept. of Biological Sciences, Grad. School of Science, Univ. of Tokyo, Japan