2007年12月 3日

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

以下は独り言なのですが、よろしかったら、String#delete の仕様が現在のよう
になっている理由を教えてくださいませ。

http://www.ruby-lang.org/ja/man/?cmd=view;name=String;em=String#delete
>str の形式は tr(1) と同じです。

−−−−

#! ruby -Ks
require "jcode"
p :start
p "135790123456789".delete("357") #=> "190124689"

# "357" の並びの部分の削除を期待したのだが、
# "3","5","7"のすべてを削除している。

# 正規表現なら、
#「"357" の並びの部分」と
#「"3","5","7"のいずれか」とを区別ができるはずだと思ったのだが・・

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

# バイトデータの配列扱いなので、配列と同じ仕様なのかと思ったら、
# 配列では全く異なった扱いになっている。

#p [1,3,5,7,9,0,1,2,3,4,5,6,7,8,9].delete([3,5,7]) #=> nil
#p [1,3,5,7,9,0,1,2,3,4,5,6,7,8,9].delete(3,5,7) #=> wrong number of arguments (3 for 1) (ArgumentError)

# trでは複数の文字のそれぞれを別の文字に置き換えるという合理性があるが・・

p "135790123456789".tr("357","三五七") #=> "1三五七9012三4五6七89" OK

# deleteでは合理的な理由が見つからない。
# trの第二引数のデフォルトを "" にすればよいじゃないか。

p "135790123456789".delete("357") #=> "190124689"
p "135790123456789".tr("357","") #=> "190124689"
#p "135790123456789".tr("357") #=> wrong number of arguments (1 for 2) (ArgumentError)

take_tk = kumagai hidetake


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




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