原です。 > まつもと ゆきひろです > > ruby 0.99.3-961210をリリースします. もう 1.00.0 直前の雰囲気。(^_^) > jcode.rbがtrだけではなく,squeeze, delete, tr_sにも対応して > います.あと,正規表現に関するバグがいくつか直ってます. おお、一気に! 眺めてみましたが、これを見るまで gsub! がイテレータブロックで |c| の様な引数を取るとは知りませんでした。多分マニュアルにも ないと思うので、書き加えてください。 それから、_expand_ch を見て思ったのですが、文字列のパターン 毎の処理は、いままで s = str.dup; s.gsub!(/<pattern>/) { ... } あるいは、 s = str.dup; while s.sub!(/<pattern>/, '') { ... } と書いたわけですが、これではしばしば不必要な文字列の生成や変形 を伴うので不効率です。で、今後は scan を使って、 str.scan(/<pattern>/) { ... } と書くことが推奨されるのではないかと思うのですが、どうでしょう。 例えば今回の jcode.rb では def _expand_ch a = nil s = self.dup s.gsub!(/(.|\n)-(.|\n)/) do |r| a = [] if $1.length != $2.length next elsif $1.length == 1 $1[0].upto($2[0]) { |c| a.push c.chr } else $1.upto($2) { |c| a.push c } end a.join('') end s.split(//) end となっていますが、 def _expand_ch a = [] self.scan(/(.|\n)-(.|\n)|(.|\n)/) do if $3 a.push $3 elsif $1.length != $2.length next elsif $1.length == 1 $1[0].upto($2[0]) { |c| a.push c.chr } else $1.upto($2) { |c| a.push c } end end a end というふうになるわけです。 ところで scan のイテレータブロックでも $&, $1, $2,.. は参照できる んですね。完璧。(^_^) でも Change.log にも scan の文字はないし、ま だ正式採用ではないのかな。 ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)