logo       

[ruby-list:42090] jcodeのtr_sが正しく動かない: msg#00121

lang.ruby.japanese

Subject: [ruby-list:42090] jcodeのtr_sが正しく動かない

川本と申します。

ruby 1.8.4で確認したのですが、
jcodeをrequireすると、tr_sが期待通りに動作しないようです。

--- 結果
$ ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]

$ ruby -e "p 'foo-bar'.tr_s('-', '_')"
"foo_bar"

$ ruby -e "require 'jcode'; p 'foo-bar'.tr_s('-', '_')"
"foo-bar"
---

jcode.rbを見たところ、該当の正規表現が
/([#{_regex_quote(from)}])\1+/
となっているため、一文字の '-' にマッチしないようです。

jcode.rbを以下のように修正すると、
上記のケースでは期待通りに動くようになりますが、
これだとマルチバイト文字を全く考慮していないので、
jcode.rbの意図にあっていないと思います。

どのように修正するのが正しいのでしょうか?


$ diff -c jcode.rb.original jcode.rb
*** jcode.rb.original 2006-04-23 16:51:54.000000000 +0900
--- jcode.rb 2006-04-23 17:03:03.000000000 +0900
***************
*** 175,181 ****
def tr_s!(from, to)
return self.delete!(from) if to.length == 0

! pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])\1+/
if from[0] == ?^
last = /.$/.match(to)[0]
self.gsub!(pattern, last)
--- 175,181 ----
def tr_s!(from, to)
return self.delete!(from) if to.length == 0

! pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])+/
if from[0] == ?^
last = /.$/.match(to)[0]
self.gsub!(pattern, last)


--
Kentaro KAWAMOTO
kentaro.kawamoto-Re5JQEeQqe8AvxtiuMwx3w@xxxxxxxxxxxxxxxx




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise