[#40753] RWiki is not WikiName - RWiki 2.1.0pre1 — Masatoshi SEKI <m_seki@...>
6 messages
2005/04/03
[#40785] nil以外のときメソッドを呼ぶ — Motomichi Matsuzaki <mzaki@...>
13 messages
2005/04/27
[ruby-list:40785] nil以外のときメソッドを呼ぶ
From:
Motomichi Matsuzaki <mzaki@...>
Date:
2005-04-27 04:43:03 UTC
List:
ruby-list #40785
松崎と申します。
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 <mzaki@biol.s.u-tokyo.ac.jp>
Dept. of Biological Sciences, Grad. School of Science, Univ. of Tokyo, Japan