From: "NARUSE, Yui" Date: 2008-01-27T12:30:55+09:00 Subject: [ruby-dev:33414] Re: Ruby1.9 String バイト列へのインデックス アクセス 成瀬です。 rubikitch@ruby-lang.org wrote: > From: "NARUSE, Yui" > Subject: [ruby-dev:33199] Re: Ruby1.9 String バイト列へのインデックス アクセス > Date: Sun, 20 Jan 2008 04:55:27 +0900 > > るびきちです。 > >>> あるいはBytesクラスを用意してString#byteで作成できるといいかもしれません。 >>> >>> s = "abcde" >>> s.byte # "abcde"のバイト列オブジェクト >>> s.byte[3] # => 100 >>> s.byte[3] = 101 # 破壊的更新 >>> s # => "abcee" >> これ、今やろうとして、怒られたんですよね(ぉ >> "hoge".bytes[1] = 0x62 >> NoMethodError: undefined method `[]=' for >> # > > たった今思い付いたのですが、String#bytesが返すオブジェクトはByteArray等 > 元々の文字列のメモリと共有しているバイト列オブジェクトを返し、そのオブジェクトが > Enumeratorと同じインターフェースを持つというのはどうでしょうか? > Enumeratorのメソッドに加えて[], []=を持つというふうに。 > ASCII-8BITなStringと違って[]が文字コードを返すのです。 > そうすると s.bytes {〜} とも s.bytes[3] とか書けますね。 > > もしやByteEnumeratorのほうがいい名前? [ruby-dev:33219] [ruby-dev:33222] に実証コードがありますね。 [] までは既存の enumerator でいけると思うのですが、 []= は外れるので、こ れをどのようなインターフェイスにし、どう既存の enumerator と区別しつつ一 般化するかが問題な気がします。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA