From: Tanaka Akira Date: 2008-01-28T01:23:31+09:00 Subject: [ruby-dev:33429] Re: Binary String In article <479776C1.4030804@yahoo.co.jp>, 遊楽庵 writes: > 計算がすっきり書けません。 なるほど。 > 文字列とバイト列がレイヤの違う話なのはわかりますし、 > 排他的だとも思っていません。 それは失礼しました。 > ただ、Stringの文字列への傾斜があまりにも過激なので > バイナリデータはどうなっちゃうの?? > と思っています。 > 要するに「バランス悪くない??」という感じでしょうか。 ふむ。 > 桐生さんの例を引くまでもなく、バイナリデータをファイルから > 読み込んで計算をするという処理は一般的だと思うのです。 > String#[]まで文字列になって > それをすっきり書く方法はなくなってしまいました。 私の経験としては、そんなに多くはないですけどねぇ。 まぁ、バイトだけじゃなくて文字のほうもそんなに多くない気がし ますが。 > 田中さんの「レイヤ」というキーワードで思いついたのですが、 > いっそのことその概念のレイヤをクラス階層で表現しちゃったらどうでしょうね。 バイト列としてアクセスするか文字列としてアクセスするかという 意図をクラスで表現すると、オブジェクトを生成するタイミングで 意図を決める必要があります。 しかし、[ruby-dev:33331] で述べたように、String にはバイト列 的な側面が常にあると考えると、そのタイミングで決定するのは固 定的過ぎます。両方の側面があるのですから、オブジェクトを生成 した後の、実際に使う段階でどの側面をいじるか決定できてもいい はずです。 というわけで、むしろ String にバイト単位にアクセスするメソッ ドをつけたほうが String にはバイト列と文字列の両方の側面があ ることを素直に表現できているのではないでしょうか。 ただ、[] と []= はひとつのクラスにひとつしかないので、バイト 列と文字列の両方で使うというのはたしかに困難です。どうしても [], []= を使いたい場合は [], []= から byte, set_byte に委譲 するオブジェクトを作るとかはどうですかねぇ。 -- [田中 哲][たなか あきら][Tanaka Akira]