From: Hisanori Kiryu Date: 2008-01-20T19:57:00+09:00 Subject: [ruby-dev:33218] Re: Ruby1.9String  バイト列へのインデックス アクセス > ちなみに、byte のではなく bytes の方が妥当だと思います。 > >>s = "abcde" >>s.byte # "abcde"のバイト列オブジェクト >>s.byte[3] # => 100 > > これは多分 s.byte[3].ord で我慢できるのではないかと自分では思いますが、 > いかがでしょうか。 すみません。最初のメールが長すぎたので、 論点がつかめなかったかもしれません。 私の言いたかったのは、”Substringを介しない” Ruby1.8までのような、 バイト列へのアクセスメソッドはないのかということです。 そういうものがないと、[ruby-dev:33186] などで述べたような ビットマップ画像にぼかしをいれる画像処理操作などで、 pixel数(数メガにもなる)の10倍の個数の一文字Stringが 生成されてしまう、というものでした。 これは本当にHugeではないでしょうか? このような操作もRuby1.8までは、オブジェクト生成数ゼロで Fixnumのみを使って行えていたのです。 他の例として、例えば、ビルトインされていない 新たな Encoding を Ruby Scriptで書くとしたら、 Ruby1.9よりRuby1.8までのStringのほうが、はるかに素直に かけるのではないかという問題提起も先のメールではしていました。 よって、s[3].ord や s.byte[3].ord などはつらすぎるというところが 議論の出発点なのです。 また、[]=がString もIntegerもアクセプトするというのは よいと思うのですが、String#[] はどちらかしか返せないため、 読み込み・書き込みの非対称性がどうしてもでてきますが、 それは我慢するより仕方のないことでしょうか? このような問題をすべて解決するために るびきちさんはByteArrayを考えてくださったのだと思います。 (ところで byte という単数形の名称はString#bytes =>Enumerator  がもうあるからではないでしょうか?  スペルミスしやすいという問題はあると思います。) よろしくお願い致します。