From: "NARUSE, Yui" Date: 2008-01-27T12:30:20+09:00 Subject: [ruby-dev:33413] Re: str[idx] = num。str.encoding == nil 成瀬です。 take_tk wrote: > たけ(tk)です > > 話の流れが追えていないのですが、 > > [ruby-dev:33229] > >> すると、str[idx] = num はこんな感じでしょうか。 > ・・ >> + if (TYPE(val) == T_FIXNUM) >> + val = rb_funcall(val, rb_intern("chr"), 1, rb_obj_encoding(str)); >> + else >> + StringValue(val); > > str[idx] = num した後で str[idx] を参照すると文字が返るってのは対称性 > の点で問題があるのではないでしょうか? えぇ、まさにその理由で却下の方向です。 > また、idxがバイト位置を示すのか、文字での位置を返すのかも曖昧な気がしま > す。 わたしの案では文字ですね。(ASCII-8BIT 等の場合は‘たまたま’バイトと一致し ます) > また、[ruby-dev:33214] では > >> 例えば (上記の問題が解決したら) >> s.byte[3] = 101 >> は >> temp = s.encoding >> s.force_encoding('ASCII-8BIT') >> s[3] = 101 >> s.force_encoding(temp) >> と書けます > > となっていますが、encodingによって  > str[idx] = num、だったり > str[idx] = chr > だったりするのも、おかしな感じがします。 いえ、これは常に両方受け取ります。文字列の場合は、num はコードポイントと みなされます。 > encodingによってバイナリ配列扱いをもうけるのなら、 > str.encoding = nil のときにバイナリ配列扱いにするというのはどうでしょう > か? str.encoding が ASCII-8BIT がバイナリ配列扱いのはずです。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA