[#45866] Ruby1.8 と1.9の安全な共存 — Ayumu Aizawa <ayumu.aizawa@...>
こんにちは、あいざわです。
7 messages
2009/02/14
[#45875] ruby1.8 と ruby1.9 の instance_eval の挙動の違いについて — kohno kazuyuki <kkohno@...>
こんにちは。
5 messages
2009/02/17
[ruby-list:45894] Re: "abc".sort returns ["abc"] with Ruby1.8.7
From:
Nobuhiro IMAI <nov@...>
Date:
2009-02-28 03:44:41 UTC
List:
ruby-list #45894
いまいです。
From: "Hideo Konami" <konami_at_kyoto-wu.ac.jp>
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 <nov@yo.rim.or.jp>
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106