From: Takanori Adachi Date: 2003-12-23T04:19:27+09:00 Subject: [ruby-list:38927] Re: Iterated sub! 再び足立、自己レスで申し訳ございません。 Programming Ruby のなかに以下の記述を発見しました。 sub! performs the substitutions of String#sub in place, returning str, or nil if no substitutions were performed. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 仕様ということで、理解しました。 大変お騒がせしました。 -- taka From: Takanori Adachi Subject: [ruby-list:38926] Iterated sub! Date: Tue, 23 Dec 2003 04:08:43 +0900 > 足立@モルガンスタンレーです。 > 業務で ruby に大変お世話になっています。 > > 現在 ruby 1.8.0 を使っていますが、以下のような現象に遭遇しました: > > > =begin > > Among the combinations (A|B|C)+(1|2) below, > only (C)+(1) leads the following error message: > > private method `sub!' called for nil:NilClass (NoMethodError) > > =end > > #va = "10.00" ## (A) > #va = "10.10" ## (B) > va = "10.1" ## (C) > > ## (1) > va.sub!(/[0]+$/,"").sub!(/\.$/,"") > > ## (2) > #va.sub!(/[0]+$/,"") > #va.sub!(/\.$/,"") > > print va, "\n" > > > これは、文字列としての数字の小数点以下にある末尾の不要な 0 (と小数点) > を取り除くというものですが、va = "10.1" のとき、(1) の gsub! を行う > と、上記のようなエラーが発生します。 > これを、(2) のように、ふたつの gsub! に分て実行すると問題なく動きます。 > > 一方 va が、最初の置換 /[0]+$/,"" で変化する場合には、(つまり、"10.00" > や "10.10" の場合には)、(1) であってもうまく動きます。 > > これは仕様でしょうか? > > -- taka >