From: take_tk Date: 2008-01-26T21:43:38+09:00 Subject: [ruby-dev:33409] str[idx] = num。str.encoding == nil たけ(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がバイト位置を示すのか、文字での位置を返すのかも曖昧な気がしま す。 また、[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 だったりするのも、おかしな感じがします。 encodingによってバイナリ配列扱いをもうけるのなら、 str.encoding = nil のときにバイナリ配列扱いにするというのはどうでしょう か? if str.encoding? p str[idx] #=> chr str[idx] = chr else # str.encoding == nil p str[idx] #=> num str[idx] = num end encodingにかかわらず入れたいなら、 temp = s.encoding s.force_encoding(nil) s[3] = 101 s.force_encoding(temp) * s.encoding = nil は s.force_encoding(nil) と同じ。 * s.encoding == nil のときの s.encoding = temp は  s.force_encoding(temp) と同じとする。 と書けるようになるので、「encodingがxxであるかどうか」の判定より簡単に なるような気がします。 Take_tk = KUMAGAI Hidetake たけ(tk)=熊谷秀武