2007年12月 4日

[ruby-list:44299] Re: p "135790123456789".delete("357") #=> "190124689"

たけ(tk)です。

[ruby-list:44297] Re: p "135790123456789".delete("357") #=> "190124689"
にて
Nobuyoshi Nakada <nobu@xxxxx> さん 曰く:

お忙しいとこ、わざわざすみません。

> > 以下は独り言なのですが、よろしかったら、String#delete の仕様が現在のよう
> > になっている理由を教えてくださいませ。
> >
> > http://www.ruby-lang.org/ja/man/?cmd=view;name=String;em=String#delete
> > >str の形式は tr(1) と同じです。
>
> trに合わせたということでしょう。

そういうことですね。
実質的な理由は、

> deleteでは削除する文字を複数指定できます。
>
> p "135790123456789".delete("0-9", "^29") #=> "929"

ということなのでしょうかね。
これがうれしい場合というのは、どういう処理をしたい場合なのだろうか?

> > p "135790123456789".delete("357") #=> "190124689"
> >
> > # "357" の並びの部分の削除を期待したのだが、
> > # "3","5","7"のすべてを削除している。
>
> そういう用途にはString#subがありますから。

> subの第二引数のデフォルトを "" にする、というのはありかもしれま
> せん。

これもそうですね。
gsub や sub で第二引数がデフォルトで "" になれば、ほぼ期待したものと同じ
になりそうです。

#p "135790123456789".delete(/357/) #=> can't convert Regexp into String (TypeError)
#p "135790123456789".delete(/[357]/) #=> can't convert Regexp into String (TypeError)
p :gsub
p "135790123456789".gsub(/357/,"") #=> "190123456789" ← これを期待した。
p "135790123456789".gsub(/[357]/,"") #=> "190124689" ← 「"3","5","7"のいずれか」を削除

> --- 僕の前にBugはない。
> --- 僕の後ろにBugはできる。

これ好きだなぁ・・

take_tk = kumagai hidetake

投稿者 xml-rpc : 2007年12月 4日 00:56
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/67209
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。