From: Akinori MUSHA Date: 2010-08-18T13:31:13+09:00 Subject: [ruby-dev:42061] Re: [Feature #3675] String#prepend, String#>> --pgp-sign-Multipart_Wed_Aug_18_13:31:13_2010-1 Content-Type: text/plain; charset=ISO-2022-JP At Tue, 10 Aug 2010 22:23:13 +0900, matz wrote: > |なので, String#prependと String#>> を追加するというのはどうでしょうか. > > 非常に興味深いです。ただ、いくつか気になる点があります。 > > (1) 実装上のことですが、appendと異なり、prependは、文字列領域 > を拡張した上で、現在の文字列の内容をコピーし、それから引 > 数の内容を先頭からコピーすることになります。つまり、 > > a = "foo" + a > > と比較して、コストはオブジェクトアロケーションひとつしか > 変わりません。それが本当にうれしいかやや疑問です。もっと > も長い目で見るとGCへの負荷が軽いというメリットが出るケー > スもあるでしょう。 今でもオブジェクト生成を避けたいのなら a[0,0] = "foo" でいいはず。 もちろん、若干遅いでしょうが正規表現を使うのもあり。 a[/^/] = "foo" # ふつうの人 a[/\A/] = "foo" # 報われない原理主義者 a[//]="foo" # ゴルファー > (2) >> というのは考えてもみなかった面白い記法です。しかし、 > 現状の文字列のメソッドで、引数のほうに破壊的な変更を加え > るメソッドはなかったように思うので、やや躊躇します。もっ > とも、Stringクラスでなければ、引数に破壊的な変更を加える > メソッドはいくつもあるので、気にすることではないのかもし > れません。 String#>> だと、レシーバが文字列かそのサブクラスのインスタンス 限定になるので #to_str を持った文字列もどきはダメということに なりますね。x.to_str + s も切なくて "#{x}s" としたりもするので、 s が殿様な感じがする x.to_str >> s は嫌かも(笑)。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Wed_Aug_18_13:31:13_2010-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEABECAAYFAkxrYhEACgkQkgvvx5/Z4e5h1ACg18ZGX/AtaxK3t4pPuKHuKACl 2J4An3JpNxWGKJLMRDqHpXw4qTqXJ4R8 =/GnG -----END PGP SIGNATURE----- --pgp-sign-Multipart_Wed_Aug_18_13:31:13_2010-1--