From: KANEKO Naoshi Date: 1998-04-12T01:58:26+09:00 Subject: [ruby-dev:2243] sub for sjis 金子です。 sub, gsubをシフトJIS対応させようと思ったのですが、 つまってしまいました。 どなたか助けてください。 やりたいことは '表' など2バイト目に \ を含むものを探して 後ろに \ を追加するだけです。 問題点はつぎの2つです。 1. イテレータ呼び出しの処理の方法について 下のコードではイテレータ呼び出しがまったく処理されない ようです。 イテレータの場合はそのままオリジナルのsub/gsub を イテレータとして呼び出したいのですが、方法が分かりません。 2. パラメタの処理方法について foo.gsub('bar') --- Wrong # of arguments(1 for 2) (ArgumentError) foo.gsub('bar') {} --- OK foo.gsub('bar', nil) --- OK foo.gsub('bar', 'bas') --- OK オリジナルにあわせて、上のように処理したいのですが、 非イテレータなら、第2パラメタが空ならエラー、 イテレータなら、第2パラメタが空でも OK、のように 区別して処理するにはパラメタの定義をどう記述すればよいの でしょうか? ------ String.gsub ---------------------------- class String alias original_gsub gsub alias original_gsub! gsub! def gsub!(from, to=nil) if iterator? self.original_gsub!(from) else if $KCODE =~ /^s/i && to to.original_gsub!(/./) do |s| if s[1] == 0x5c s = s + '\\' end s = s end end self.original_gsub!(from, to) end end def gsub(from, to=nil) self.dup.gsub!(from, to) end end -- 金子 尚史 (KANEKO Naoshi) wbs01621@mail.wbs.or.jp