From: Nobuhiro IMAI Date: 2009-02-28T12:44:41+09:00 Subject: [ruby-list:45894] Re: "abc".sort returns ["abc"] with Ruby1.8.7 いまいです。 From: "Hideo Konami" Date: Fri, 27 Feb 2009 10:15:43 +0900 > それよりなぜこういうことになるのか,それを知りたいので > すが,答えてやろうという方がおられたらうれしいです。 String#sort で配列が返るのはなぜ?ということでしょうか。 >> ruby version > ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0] > > irb(main):001:0> "abc".sort > => ["abc"] 1.8 では String(Enumerable)#sort が String#each を呼んで、行ごとにイテ レートするので、self.each_line.to_a.sort のような処理をしているからだ と思います。 るりまより: >> String#each >> --- each(rs = $/) {|line| ... } -> () >> --- each_line(rs = $/) {|line| ... } -> () >> --- each(rs = $/) -> Enumerable::Enumerator >> --- each_line(rs = $/) -> Enumerable::Enumerator >> >> 文字列中の各行に対して繰り返します。 each_line というか、ここでは lines の方が合ってる気がしますが、同じこ とですね。 >> "".sort => [] >> "".each_line.to_a.sort => [] >> "b\n\a\n".sort => ["\a\n", "b\n"] >> "b\n\a\n".each_line.to_a.sort => ["\a\n", "b\n"] to_a はなくてもいいんですが、それはそれとして。 >> /usr/bin/ruby --version > ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0] > > irb(main):001:0> "abc".sort > NoMethodError: undefined method `sort' for "abc":String こちらは okkez さんのおっしゃるように、String#sort がなくなったからで すね。 -- Nobuhiro IMAI Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106