From: take_tk Date: 2007-12-03T02:10:33+09:00 Subject: [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