[#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:40795] Re: nil以外のときメソッドを呼ぶ
From:
"H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date:
2005-04-28 00:54:51 UTC
List:
ruby-list #40795
こんにちは、山本です。
> str = array.shift.nonnil{|x| x.sub(/^XX/, '')}
>
>などのようにすることなのですが、
>もっとシンプルに書く方法はないでしょうか?
> str = array.shift.nonnil?.sub(/^XX/, '')
>
>のように書けたら嬉しいのですが、これは多分文法上不可能なんですよね?
__send__ を使えば、似たようなことができます。
class Object
def trial(*a, &b)
nil? || self == "" ? nil : __send__(*a, &b)
end
end
for line in ["1\t2\t3", "1.0\t2\t", "1\t2\tXXfoo"]
array = line.chomp.split("\t")
float = array.shift.trial(:to_f)
int = array.shift.trial(:to_i)
str = array.shift.trial(:sub, /^XX/, '')
# str = array.shift.trial(:sub, /^XX/) { '' }
p [float, int, str]
end
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Object#a__send__
Array に shift の変種を用意するともっとシンプルかもしれません。
class Array
def shift2(*a, &b)
x = shift
x.nil? || x == "" ? nil : x.__send__(*a, &b)
end
end
for line in ["1\t2\t3", "1.0\t2\t", "1\t2\tXXfoo"]
array = line.chomp.split("\t")
float = array.shift2(:to_f)
int = array.shift2(:to_i)
str = array.shift2(:sub, /^XX/, '')
# str = array.shift2(:sub, /^XX/) { '' }
p [float, int, str]
end