Binary String

e$B@.@%$G$9!#e(B

U.Nakamura wrote:

% cat ascii-8bit.rb
#Encoding:ASCII-8BIT
e$B$$$d!"$=$3$N0UL#$G$J$/!"$(!<$C$H!"e(B

rb_encoding *
rb_locale_encoding(void)
{
VALUE charmap = rb_locale_charmap(rb_cEncoding);
int idx;

if (NIL_P(charmap))
    idx = rb_enc_find_index("US-ASCII");  <= e$B$3$3e(B
else
    idx = rb_enc_find_index(StringValueCStr(charmap));
if (idx < 0)
    return rb_ascii8bit_encoding();

return rb_enc_from_index(idx);

}

e$B$C$F<q;]$G$7$?e(B

e$B@.@%$G$9!#e(B

U.Nakamura wrote:

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:33371] Re: Binary String”
on Jan.25,2008 14:21:22, [email protected] wrote:
| e$B$C$F<q;]$G$7$?e(B

e$B$R$g$C$H$7$F!"!V:.F1$J$5$C$F$$$k!W$N<g8l$O;d$8$c$J$$e(B?

e$B$“$”$"!"e(B[ruby-dev:33358] e$B$N$^$D$b$H$5$s$G$9$M!#e(B

script encodinge$B$N%G%U%)%k%H$Oe(BASCII-8BITe$B$H$$$&$N$O@5$7$$!"$G$9e(B
e$B$h$Me(B?

e$B$($'!"e(B[ruby-dev:33368] e$B$G@5$7$$$H;W$$$^$9!#e(B

e$B@>;3OB9-$G$9!#e(B

At Fri, 25 Jan 2008 00:55:39 +0900,
Yukihiro M. wrote:

|e$BNc$($Pe(B /e$B$$e(B/ e$B$He(B /\xa4\xa4/ e$B$N0c$$$G$9$,!#e(B

e$B$"!"$=$&$+!#%(%9%1!<%W$5$l$?e(Bbyte(e$B8e<Te(B)e$B$N$3$H$G$9!#e(B
e$BA0<T$O%(%i!<$G$$$$$H;W$$$^$9$h!#e(B

[ruby-dev:33357]e$B$N;~E@$G$Oe(BRegexp#sourcee$B$,e(BUS-ASCIIe$B$NHO0OFb$Ne(B
e$B>l9g$,$"$k$H$$$&$3$H$K5$$E$$$F$$$^$;$s$G$7$?!#e(B

magic commente$B$Ge(BUS-ASCIIe$B$,;XDj$5$l$F$$$?>l9g!"e(B
/\u3042/e$B$Oe(BRegexp#encodinge$B$,e(BUTF-8e$B$Ge(Bsourcee$B$Ne(Bencodinge$B$Oe(B
US-ASCIIe$B$r4|BT$9$k5$$,$7$^$9!#e(B

magic
commente$B$Ge(BUS-ASCIIe$B$,;XDj$5$l$F$$$?>l9g$Ne(B/\xa4\xa4/e$B$Oe(B
US-ASCIIe$B$NHO0O$@$107$$$?$$$N$K4V0c$($F$$$k$N$+!"e(B
sourcee$B$Ne(Bencodinge$B$re(BUS-ASCIIe$B$K$7$?$$$@$1$J$N$+$Ge(B
e$B%(%i!<$K$J$C$F$[$7$$$+!"e(BRegexp#encodinge$B$,e(BASCII-8BITe$B$Ke(B
e$B$J$C$F$[$7$$$@$1$J$N$+$,JQ$o$C$F$-$=$&$G$9!#e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

e$B8&5f<<$N%5!<%P$,$$$-$J$j40A4$K$4NW=*$H$J$j!$e(B

e$BF1;~$K30IU$1e(B RAID

e$B$bIN;`$H$$$&$H$s$G$b$J$$>u67$K$J$C$F$^$7$?!%e(B

e$B30IU$1%O!<%I%&%'%"e(B RAID

e$B$N:F5/F0$N;n$_$r2?EY$b7+$jJV$7$?7k2L!$e(B

RAID 0+1 e$B$r9=@.$9$k%G%#%9%/$Ne(B 6 e$B3d$r?I$&$8$FG’<1$7!$e(B

e$B4q@WE*$K%.%j%.%j$NJRGY>uBV$G2TF/$G$-$F%G!<%?$r5_=P$G$-$^$7$?$,!$e(B

e$BB4O@!$=$O@$NDI$$9~$;~4|$K4m$J$/%G!<%?$r<:$&$H$3$m$G$7$?!%e(B(^^;

e$BI|5l$^$G$K$+$J$j$N;~4V$,$+$+$C$?$b$N$NHo32$O:G>.8B$G$9$_$^$7$?$,!$e(B

e$B<:$C$?;~4V$ODK$$$G$9!%e(B

e$B3’MM$bL}CG$J$5$j$^$;$s$h$&!%e(B(^_^)

From: “NARUSE, Yui” [email protected]
Subject: [ruby-dev:33321] Re: Binary String
Date: Wed, 23 Jan 2008 20:58:19 +0900
Message-ID: [email protected]

e$B$&!<$s!“e(B$KCODE e$B$K0MB8$7$F$$$?$i!<!”$I$&$@$m$&!#e(B$KCODE e$B$r<+J,$GDj5A$7$?$ie(B
e$B5_$($F$7$^$&%Q%?!<%s$H!"$I$&$7$h$&$b$J$$%Q%?!<%s$KFs6K2=$9$k$h$&$J5$$O$7e(B
e$B$J$$$G$b$J$$$G$9$,!#e(B

e$BB?J,!$$I$&$7$h$&$b$J$$%Q%?!<%s$H$$$&$N$Oe(B
UNDEFINED-8BIT e$B$N$h$&$J$b$N$G$b5_:Q$G$-$J$$$s$G$7$g$&$M!%e(B
$KCODE e$B$r<+J,$GDj5A$7$F$be(B 1.9
e$B$N%a%=%C%I$K$O5!G=$7$F$/$l$^$;$s$+$i!$e(B
e$BLr$K$ON)$?$J$$5$$,$7$^$9!%e(B

$KCODE e$B$r;H$&$h$&$K!$I,MW$J%a%=%C%I$r$9$Y$Fe(B wrap

e$B$9$k$H$$$&$N$Oe(B

e$B$"$^$j$K$bO+NO$,3d$K9g$o$J$$$N$G!$EvA39M$($F$O$*$i$l$^$;$s$h$M!)e(B

e$B$“$H$O!”%i%$%V%i%j$K%V%m%C%/$rEO$9$J$j$7$F%i%$%V%i%jCf$G=hM}$9$k$+!"%*%Ve(B
e$B%8%'%/%H$r<u$1<h$C$F$+$i@_Dj$9$k$+$9$l$P!#e(B

e$B$(!A$C$H!$$=$l$C$F!V%i%$%V%i%jB&$K<j$rF~$l$k!W$C$F$3$H$G$9$h$M!%e(B
e$B>e5-$N!V%i%$%V%i%jB&$K<j$rF~$l$i$l$J$$$3$H$,A0Ds$J$i$Pe(B e$B!W$H$Oe(B
e$BL7=b$7$F$7$^$$$^$;$s$+!%e(B(^_^;

e$B$$$(!"e(B[ruby-dev:33269] e$B$NNc$NG0F,$KCV$$$F$$$k$N$G<j$rF~$l$F$$$^$;$s!#e(B

e$B%i%$%V%i%j$,85!9%V%m%C%/$r<u$1<h$k$3$H$,$G$-$k;EMM$K$J$C$F$J$1$l$Pe(B
e$B$I$&$7$h$&$b$J$$$h$&$K;W$($k$N$G$9$,!%!%!%e(B
e$B%i%$%V%i%j!VFb!W$G$=$&$7$?BP1~$r9T$o$;$k$?$a$K$O!$e(B
e$B$=$N%i%$%V%i%j$K<j$rF~$l$k$7$+$J$$$G$9$h$M!%e(B
e$B;d$,$^$?2?$+4*0c$$$7$F$$$k$N$G$7$g$&$+!)e(B

e$BF1$8$h$&$K:.$6$C$FJV$5$l$F$b$G$9$+!)e(B

e$B$$$^$$$AA[Dj$5$l$F$$$k>u67$,J,$+$i$J$$$N$G$9$,!“$H$j$”$($:e(B nkf e$B$Oe(B
encoding e$BBP1~$J$N$O$$$$$N$+$J!#$G!“$=$N;~E@$Ge(B encoding e$B$,$D$/$N$G$”$H$Oe(B
e$B$h$7$J$K$J$O$:$J$s$G$9$,!“$=$3$KB>$Ne(B ascii only e$B$G$J$$e(B ASCII-8BIT e$B$NJ8;ze(B
e$BNs$r7k9g$5$;$h$&$H$9$k$H:$$j$^$9$,!”$3$N>l9g$ONc30$@$7$F$7$^$&$N$G$A$g$Ce(B
e$B$H0c$&$h$&$J!#e(B

e$B$4$a$s$J$5$$!%e(Bnkf e$B$OC1$J$kNc$J$N$G$5$7$F=EMW$G$O$"$j$^$;$s!%e(B
1.8 e$BM3Mh$N%i%$%V%i%jFbIt$Ge(B nkf
e$B$J$I$NJL$NJ8;zNs=hM}%i%$%V%i%j$J$je(B
e$BAH$9~$%a%=%C%I$J$j$r8F$S=P$9:]!$e(B
e$B$=$Ne(B 1.8 e$BM3Mh$N%i%$%V%i%j$Oe(B encoding
e$B$J$s$F$b$N$rCN$j$^$;$s$+$ie(B
e$B2?$i$+$Ne(B encoding e$B$r2>Dje(B or
e$BA[Dj$7$FJ8;zNs$r@8@.$7!$=hM}$r0MMj$7$^$9!%e(B
e$B$3$N$H$-e(B encoding e$B$,;XDj$5$l$F$O$$$J$$$7!$e(B
magic comment e$B$J$s$+$bF~$C$F$$$^$;$s$+$i!$e(B
ASCII-8BIT e$B$GJ8;zNs$,@8@.$5$l$k2DG=@-$,9b$$$N$G$9$h$M!)e(B

e$B8=>u$Ne(B nkf e$B$Oe(B encoding e$BBP1~$J$o$1$G$9$,!$e(B
e$B2>Dj$H$7$Fe(B 1.8 e$BHG$Ne(B nkf (1.8 e$BE*$KF0:n$9$k$b$N$He(B
1.9 e$B$N%a%=%C%I$rMxMQ$9$k$b$Ne(B) e$B$N$h$&$J$b$N$He(B
1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$H$N>l9g$G9M$($F$_$^$9e(B
(e$BJL$Ke(B nkf
e$B$G$J$/$F$b$$$$$G$9$7!$L>A0$,:.Mp$N85$K$J$k$+$b$7$l$^$;$s$,!$e(B
e$BOC$NN.$l>e$J$s$H$J$/$H$$$&$3$H$Ge(B)e$B!%e(B
e$B!V%a%$%s%9%/%j%W%He(B e$B"Ne(B 1.8 e$BM3Mh$N%i%$%V%i%je(B e$B"Ne(B
nkf e$B!We(B
e$B$H$$$&$h$&$KMxMQ$5$l$F$$$k>u67$G$9!%e(B
e$B$J$!$!Ve(B1.8 e$BM3Mh$N%i%$%V%i%j!W$G$9$+$i!$e(B
e$B$=$N%i%$%V%i%j$Oe(B nkf
e$B$N$h$&$J$b$N$,>e5-$N$I$N%?%$%W$+$OCN$j$^$;$s$7!$e(B
1.8 e$BE
$KF0:n$9$k$b$N$@$H9M$($F:n$i$l$F$$$k$O$:$G$9!%e(B
e$B$G!$$3$N!Ve(B1.8
e$BM3Mh$N%i%$%V%i%j!W$O!V$=$N$^$^;H$&!W$H$$$&$3$H$G!$e(B
1.9 e$BBP1~$N$h$&$J=$@5$N<j$rF~$l$J$$$b$N$H$7$^$9!%e(B

1.8 e$BHG$Ge(B 1.8 e$BE*$KF0:n$9$k$b$Ne(B (encoding
e$B$rMxMQ$9$k$h$&$Je(B
1.9 e$B$N%a%=%C%I$de(B C e$B$N4X?t$OMxMQ$7$F$$$J$$e(B) e$B$N>l9g$O!$e(B
encoding e$B$J$s$F$b$N$OCN$j$^$;$s$+$i!$e(B
encoding e$B@_Dj$rL5;k$7$F=hM}$9$k$G$7$g$&!%e(B
e$B$=$N$?$a!$LdBj$J$/=hM}7k2L$rJV$7$F$/$l$k$H;W$$$^$9!%e(B
e$B$?$@!$e(BString e$B%*%V%8%'%/%H$N@8@.$Oe(B 1.9 e$B$G$9$+$ie(B
1.9 e$B$N%k!<%k$K=>$C$Fe(B encoding e$B$,M?$($i$l!$e(B
nkf e$B$N$h$&$J$b$N$NLaCM$Ne(B encoding e$B$O!$e(B
e$BB?J,e(B ASCII-8BIT e$B$K$J$k$N$G$9$h$M!)e(B
e$B$3$N%1!<%9$G$O!$e(B1.8 e$BM3Mh$N%i%$%V%i%j>e$G$Oe(B
e$B$9$Y$Fe(B ASCII-8BIT e$B$G07$&$3$H$K$J$j!$e(B
ASCII-8BIT e$B$G%a%$%s%9%/%j%W%H$KJV$9$H;W$o$l$^$9!%e(B
e$B%a%$%s%9%/%j%W%H$Oe(B 1.9 e$BA0Ds$G$9$N$G!$e(B
e$B%i%$%V%i%j$NA[Dje(B encoding e$B$K9g$o$;$Fe(B
e$BLa$C$F$-$?J8;zNs$KBP$7$Fe(B force_encoding e$B$9$l$Pe(B
e$B3N$+$K$J$s$H$+BP=h$G$-$k$G$7$g$&!%e(B

e$B<!$Ke(B 1.8 e$BHG$Ge(B 1.9
e$B$N%a%=%C%I$rMxMQ$9$k$b$N$K$D$$$F$G$9!%e(B
e$B$3$N%1!<%9$G$be(B nkf e$B$N$h$&$J$b$N$Oe(B 1.9
e$B$rA[Dj$7$F=q$+$l$?$o$1$G$Oe(B
e$B$J$$$?$a!$e(Bmagic comment e$B$OB8:$7$^$;$s!%e(B
e$B$3$N$H$-!$e(B1.8 e$BM3Mh$N%i%$%V%i%j$G@8@.$5$l$Fe(B
ASCII-8BIT e$B$H$5$l$?J8;zNs$,e(B nkf e$B$N$h$&$J$b$N$Ke(B
e$BEO$5$l$k>l9g$r9M$($^$9!%e(B
e$B%a%=%C%I$,<u$1<h$k0z?t$K0MB8$9$kE@$b$“$j$^$9$,!$7k2L$Oe(B
(1) e$BNc30H/@8e(B
(2) e$BE,@Z$K=hM}$5$l$FE,@Z$Je(B encoding e$B$,M?$($i$l$?$b$N$,JV$ke(B
(3) e$B$?$^$?$^E,@Z$K=hM}$O$5$l$?$,e(B encoding e$B$Oe(B ASCII-8BIT
e$B$GJV$ke(B
(ASCII-8BIT e$B$O%i%$%V%i%j$,A[Dj$7$F$$$ke(B encoding
e$B$G$O$J$$e(B)
(4) e$BNc30$O@8$8$J$$$,!$e(BASCII-8BIT e$B$N$^$^e(B (e$BITE,@Z$K!)e(B)
e$B=hM}$5$l!$e(B
e$B2?$i$+$Ne(B encoding (ASCII-8BIT?) e$B$GJV$ke(B
e$B$H$$$&$H$3$m$G$7$g$&$+!%e(B
1.8 e$BM3Mh$N%i%$%V%i%j$O!$E,@Z$K=hM}$G$-$?>l9g$Ne(B encoding e$B$re(B
e$BCN$C$F$$$k$G$7$g$&$+$i!$$=$NA[Dj$K=>$C$?=hM}$r9T$&$O$:$G$9!%e(B
e$B$?$@$7!Ve(B1.8 e$BM3Mh!W$G$9$+$i!$LaCM$Ke(B force_encoding
e$B$J$I$Oe(B
e$B$9$k$O$:$b$”$j$^$;$s!%e(B
1.8 e$BM3Mh$N%i%$%V%i%j$G@8@.$5$l$?J8;zNs$Oe(B ASCII-8BIT
e$B$G$9$+$i!$e(B
e$B>e5-e(B (2) e$B$N>l9g!$=hM}$K$h$C$F$Oe(B encoding
e$BIT@09g$G$3$1$^$9!%e(B
e$B$3$1$J$1$l$PE,@Z$Je(B encoding e$B$r;}$C$?7k2L$rJV$;$=$&$G$9!%e(B
e$B>e5-e(B (3)
e$B$N>l9g$O!$=hM}$K$h$C$F$OITE,@Z$J7k2L$H$J$k$+$b$7$l$^$;$s!%e(B
e$BLaCM$Ne(B encoding e$B$OB?J,e(B ASCII-8BIT e$B$H$J$k$G$7$g$&!%e(B
e$B>e5-e(B (4) e$B$N>l9g$O!$2?$rJV$9$3$H$K$J$k$+$o$+$j$^$;$s!%e(B(^
^;

e$B:G8e$Ke(B 1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$rMxMQ$9$k%1!<%9$G$9!%e(B
1.8 e$BM3Mh$N%i%$%V%i%j$G@8@.$5$l$?e(B ASCII-8BIT
e$BJ8;zNs$,EO$5$l$k>l9g!$e(B
1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$O$=$Ne(B encoding
e$B$r?.$8$F=hM}$r9T$&$O$:$G$9!%e(B
e$B$G$9$,!$e(B1.8 e$BM3Mh$N%i%$%V%i%j$,A[Dj$7$F$$$ke(B encoding e$B$Oe(B
ASCII-8BIT e$B$G$O$"$j$^$;$s$+$i!$7k2L$O!$e(B
(1) e$BNc30H/@8e(B
(2) e$BNc30$O@8$8$J$$$,!$e(BASCII-8BIT e$B$N$^$^e(B (e$BITE,@Z$K!)e(B)
e$B=hM}$5$l!$e(B
e$B2?$i$+$Ne(B encoding (ASCII-8BIT?) e$B$GJV$ke(B
e$B$H$$$&$H$3$m$+$b$7$l$^$;$s!%e(B
e$B!V$?$^$?$^$&$^$/!W$H$$$&$3$H$,@dBP$K$J$$$H$O8@$$@Z$l$^$;$s$,!%e(B

e$B$J$*!$%a%$%s%9%/%j%W%H$O$[$H$s$I$N>l9g$Ge(B
e$BLaCM$H$7$F4|BT$9$ke(B encoding e$B$rCN$C$F$$$k$G$7$g$&$+$i!$e(B
e$B@5$7$/=hM}$5$l$?7k2L$,JV$5$l$5$($9$l$P!$e(B
force_encoding e$B$GE,@Z$K@_Dj$7$F$d$k$3$H$O2DG=$G$7$g$&!%e(B
e$B$G$9$,!$ITE,@Z$J7k2L$,JV$5$l$F$7$^$&$H$I$&$7$h$&$b$"$j$^$;$s!%e(B

e$B8+Mn$H$7$,$"$j$=$&$J5$$b$7$F$$$^$9$,!$e(B
UNDEFINED-8BIT + default_undefind e$B$J$ie(B
e$B>e5-$N$9$Y$F$r$+$J$j$N3NN($G5_:Q$G$-$=$&$J5$$,$7$^$9!%e(B

1.8 e$BHG$Ge(B 1.8 e$BE*$KF0:n$9$k$b$N$N%1!<%9$G$O!$e(B
e$BLaCM$Oe(B UNDEFINED-8BIT e$B$H$J$j!$e(B
e$BL5M}$Ke(B force_encoding e$B$7$J$/$F$be(B default_undefind
e$B$H$7$Fe(B
e$B=hM}$rB?J,@5>o$K7QB3$G$-$^$9!%e(B

1.8 e$BHG$Ge(B 1.9 e$B$N%a%=%C%I$rMxMQ$9$k$b$N$N%1!<%9$be(B
1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$rMxMQ$9$k%1!<%9$b!$e(B
e$BLdBj$O$$$:$l$bE,@Z$Je(B encoding e$B$rM?$($k$3$H$,$G$-$:$Ke(B
ASCII-8BIT e$B$H$7$F=hM}$7$F$$$k$H$3$m$K$"$j$^$9$+$i!$e(B
encoding e$B$,e(B default_undefind e$B$H$J$k$3$H$Ge(B
e$B9b$$3NN($GE,@Z$K=hM}$G$-$k$h$&$K$J$k$H;W$o$l$^$9!%e(B
1.8 e$BM3Mh$N%i%$%V%i%j$G@8@.$5$l$?$^$^$GL$=hM}$N$b$N$Oe(B
UNDEFINED-8BIT e$B$GJV$C$F$/$k$G$7$g$&$7!$e(B
ASCII-8BIT e$B$J$i2?$i$+$N=hM}>e$NI,A3$G$=$&$J$C$?$O$:$G$9!%e(B
e$BLaCM$r$=$N$^$^0J9_$N=hM}$K2s$7$F$b!$e(B
UNDEFINED-8BIT e$B$Oe(B default_undefined e$B$H$7$F=hM}$5$l$k$?$a!$e(B
e$B2?$iLdBj$J$/=hM}$G$-$k$H9M$($^$9!%e(B
e$B$b$A$m$s!$e(BUNDEFINED-8BIT e$B$r<u$1<h$C$?%a%$%s%9%/%j%W%H$Oe(B
force_encoding e$B$7$?J}$,$$$$$H$O;W$$$^$9!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Yukihiro M. [email protected]
Subject: [ruby-dev:33333] Re: Binary String
Date: Thu, 24 Jan 2008 00:57:59 +0900
Message-ID: [email protected]

e$B:_$9$k$+$K$+$+$C$F$/$k$H;W$$$^$9!#e(B
e$B$=$&$G$9$M!%e(B

e$B$G!“8=:!"$$J$5$s$NEXNO$K$h$C$F0U?^$;$:$Ke(BASCII-8BITe$B$r;H$C$Fe(B
e$B$7$^$&3d9g$O$I$s$I$s8:$C$F$$$^$9!#%(%s%3!<%G%#%s%0$,L@<($5$le(B
e$B$k6ILL$OA}$($F$$$^$9$7!“e(BASCIIe$B$G$”$k$Y$-$b$N$NB?$/$Oe(BUS-ASCIIe$B$Ke(B
e$B$J$C$F$$$^$9$7!#$D$^$j!“e(BUNDEFINED-8BITe$B$,$”$C$F$b!”$=$l$He(B
ASCII-8BITe$B$r6hJL$7$J$1$l$P$J$i$J$$6ILL$,8:$C$F$$$k!"8@$$J}$re(B
e$BJQ$($k$H!“e(Bbe$B$N3d9g$O$I$s$I$s8:$C$F$$$F!“1J0f$5$s$N%”%$%G%#%”$Ne(B
e$BM-8z@-$b2<$,$C$F$$$k$H$$$&$3$H$G$O$J$$$+$H;W$$$^$9!#e(B

e$B$&!A$s!$$I$&$J$s$G$7$g$&!)e(B
e$B$I$s$I$s2~A1$5$l$F$$$k$3$H$OH]Dj$9$k$D$b$j$O$"$j$^$;$s$7e(B
e$B$=$NDL$j$@$H;W$$$^$9$,!$$=$l$H!Ve(Bb
e$B$N3d9g$,$I$s$I$s8:$C$F$$$k!W$H$,e(B
e$BK\Ev$KD>7k$7$F$$$k$N$+$O;d$K$O$o$+$j$^$;$s!%e(B
e$BJL%a!<%k$K=R$Y$?$h$&$J%i%$%V%i%j$NMm$_$r9M$($k$H!$e(B
e$B$=$&C1=c$K$O8:$C$F$/$l$J$$$N$G$O$J$$$+$H$$$&5$$b$7$^$9!%e(B

UNDEFINED-8BITe$B$,$“$C$F$b%V%i%C%/%%C%/%9$NLa$jCM$OF1$8%(%s%3!<e(B
e$B%G%#%s%0$G$”$k$H?dDj$9$k$7$+$J$$$H;W$&$s$G$9$,!"$J$K$+4V0c$Ce(B
e$B$F$^$9!)e(B

e$B$“!“8D!9$N%i%$%V%i%j8F$S=P$7$NA0$Ke(Bdefault_undefinede$B$r;XDj$9$k$Ce(B
e$B$F$3$H$J$N$+$J!#$=$&$+!”$=$l$@$H0UL#$,$”$k$+$J!#$G$b!"$=$Ne(B
APIe$B$OHr$1$?$$$N$G$9$,!#%9%l%C%I%;!<%U$8$c$J$$$7!#e(B

e$B$O$$!%e(B
default_undefined e$B$r;XDj$7$F$+$i8F$s$G$d$k$3$H$G!$e(B1.8
e$B$N$h$&$K!$e(B
e$BA[Dj$7$F$$$ke(B encoding
e$B$O$"$k$1$l$IL@<($O$7$F$$$J$$$H$$$&%1!<%9$Ge(B
e$BA[Dj$7$?e(B encoding
e$B$K4p$E$/=hM}$r9T$C$F$$$kItJ,$N5_:Q$r9M$($F$$$^$9!%e(B

e$B$J$*!$JL$Ke(B UNDEFINED-8BIT e$B$r6/0z$K2!$79~$b$&$H$$$&$h$&$Je(B
e$B0U?^$O$“$j$^$;$s$7!$e(B1.8
e$B$H$N8_49@-$r$”$kDxEY$O<N$F$M$P$J$i$J$$e(B
e$B$H$$$&$N$b>5CN$7$F$$$^$9!%e(B
e$B$G$b!$$A$g$C$H$7$?$3$H$G8_49@-$r0];}$G$-$k$N$G$"$l$Pe(B
e$B$G$-$k$+$.$j0];}$7$?J}$,$$$$$N$G$O$J$$$+$H$O;W$C$F$^$9!%e(B

e$B$G!$Nc$($Pe(B UNDEFINED-8BIT e$B$N$h$&$J$b$N$r2C$($k$3$H$Ge(B
e$B0];}$G$-$k2DG=@-$H$=$l$r2C$($k$3$H$K$h$k32$H$re(B
e$BBPHf$7$J$1$l$P$J$i$J$$$N$G$7$g$&$1$I!$e(B
e$B!V<BAu$,LLE]!W!$!V$J$/$F$bBg>fIW$G$O!W$H$$$&DxEY$Ge(B
e$B32$NFbMF$d5,LO$K$D$$$F$^$@==J,$KG<F@$G$-$F$$$^$;$s!%e(B
e$B!VK\Ev$K$=$l$Oe(B 1.8 e$B$H$N8_49@-$r<N$F$6$k$rF@$J$$$[$I$Ke(B
e$B32$K$J$k$3$H$J$N$+!W$H$$$&OC$G$9!%e(B
e$B$b$A$m$s!$8_49@-0];}$r$I$NDxEY=EMW$H8+$k$+$Oe(B
e$B?M$=$l$>$l$G$7$g$&$1$I!%!%!%e(B

e$B$?$1e(B(tk)e$B$G$9e(B

e$BOC$NN.$l$,DI$($F$$$J$$$N$G$9$,!"e(B

[ruby-dev:33229]

e$B$9$k$H!"e(Bstr[idx] = num e$B$O$3$s$J46$8$G$7$g$&$+!#e(B
e$B!&!&e(B

  • if (TYPE(val) == T_FIXNUM)
  •   val = rb_funcall(val, rb_intern("chr"), 1, rb_obj_encoding(str));
    
  • else
  •   StringValue(val);
    

str[idx] =
nume$B!!$7$?8e$G!!e(Bstr[idx]e$B!!$r;2>H$9$k$HJ8;z$,JV$k$C$F$N$OBP>N@-e(B
e$B$NE@$GLdBj$,$"$k$N$G$O$J$$$G$7$g$&$+!)e(B

e$B$^$?!"e(Bidxe$B$,%P%$%H0LCV$r<($9$N$+!"J8;z$G$N0LCV$rJV$9$N$+$b[#Kf$J5$$,$7$^e(B
e$B$9!#e(B

e$B$^$?!"e(B[ruby-dev:33214] e$B$G$Oe(B

e$BNc$($Pe(B (e$B>e5-$NLdBj$,2r7h$7$?$ie(B)
s.byte[3] = 101
e$B$Oe(B
temp = s.encoding
s.force_encoding(‘ASCII-8BIT’)
s[3] = 101
s.force_encoding(temp)
e$B$H=q$1$^$9e(B

e$B$H$J$C$F$$$^$9$,!“e(Bencodinge$B$K$h$C$F!!e(B
str[idx] = nume$B!”$@$C$?$je(B
str[idx] = chr
e$B$@$C$?$j$9$k$N$b!"$*$+$7$J46$8$,$7$^$9!#e(B

encodinge$B$K$h$C$F%P%$%J%jG[Ns07$$$r$b$&$1$k$N$J$i!"e(B
str.encoding = nil
e$B$N$H$-$K%P%$%J%jG[Ns07$$$K$9$k$H$$$&$N$O$I$&$G$7$g$&e(B
e$B$+!)e(B

if str.encoding?
p str[idx] #=> chr
str[idx] = chr
else # str.encoding == nil
p str[idx] #=> num
str[idx] = num
end

encodinge$B$K$+$+$o$i$:F~$l$?$$$J$i!"e(B

temp = s.encoding
s.force_encoding(nil)
s[3] = 101
s.force_encoding(temp)

e$B!v!!e(Bs.encodinge$B!!e(B=e$B!!e(Bnile$B!!$O!!e(Bs.force_encoding(nil)e$B!!$HF1$8!#e(B
e$B!v!!e(Bs.encodinge$B!!e(B==e$B!!e(Bnile$B!!$N$H$-$N!!e(Bs.encoding =
tempe$B!!$O!!e(B
s.force_encoding(temp)e$B!!$HF1$8$H$9$k!#e(B

e$B$H=q$1$k$h$&$K$J$k$N$G!"!Ve(Bencodinge$B$,#x#x$G$"$k$+$I$&$+!W$NH=Dj$h$j4JC1$Ke(B
e$B$J$k$h$&$J5$$,$7$^$9!#e(B

Take_tk = KUMAGAI Hidetake
e$B$?$1e(B(tk)e$B!a7’C+=(Ipe(B

e$B@.@%$G$9!#e(B

take_tk wrote:

  • else
  •   StringValue(val);
    

str[idx] = nume$B!!$7$?8e$G!!e(Bstr[idx]e$B!!$r;2>H$9$k$HJ8;z$,JV$k$C$F$N$OBP>N@-e(B
e$B$NE@$GLdBj$,$"$k$N$G$O$J$$$G$7$g$&$+!)e(B

e$B$($’!"$^$5$K$=$NM}M3$G5Q2<$NJ}8~$G$9!#e(B

e$B$^$?!"e(Bidxe$B$,%P%$%H0LCV$r<($9$N$+!"J8;z$G$N0LCV$rJV$9$N$+$b[#Kf$J5$$,$7$^e(B
e$B$9!#e(B

e$B$o$?$7$N0F$G$OJ8;z$G$9$M!#e(B(ASCII-8BIT
e$BEy$N>l9g$O!F$?$^$?$^!G%P%$%H$H0lCW$7e(B
e$B$^$9e(B)

e$B$H$J$C$F$$$^$9$,!“e(Bencodinge$B$K$h$C$F!!e(B
str[idx] = nume$B!”$@$C$?$je(B
str[idx] = chr
e$B$@$C$?$j$9$k$N$b!"$*$+$7$J46$8$,$7$^$9!#e(B

e$B$$$(!"$3$l$O>o$KN>J}<u$1<h$j$^$9!#J8;zNs$N>l9g$O!"e(Bnum
e$B$O%3!<%I%]%$%s%H$He(B
e$B$_$J$5$l$^$9!#e(B

encodinge$B$K$h$C$F%P%$%J%jG[Ns07$$$r$b$&$1$k$N$J$i!"e(B
str.encoding = nil e$B$N$H$-$K%P%$%J%jG[Ns07$$$K$9$k$H$$$&$N$O$I$&$G$7$g$&e(B
e$B$+!)e(B

str.encoding e$B$,e(B ASCII-8BIT e$B$,%P%$%J%jG[Ns07$$$N$O$:$G$9!#e(B

e$B@.@%$G$9!#e(B

[email protected] wrote:

s.byte[3] # => 100
Enumeratore$B$N%a%=%C%I$K2C$($Fe(B[], []=e$B$r;}$D$H$$$&$U$&$K!#e(B
ASCII-8BITe$B$Je(BStringe$B$H0c$C$Fe(B[]e$B$,J8;z%3!<%I$rJV$9$N$G$9!#e(B
e$B$=$&$9$k$He(B s.bytes {e$B!Ae(B} e$B$H$be(B s.bytes[3] e$B$H$+=q$1$^$9$M!#e(B

e$B$b$7$de(BByteEnumeratore$B$N$[$&$,$$$$L>A0!)e(B

[ruby-dev:33219] [ruby-dev:33222] e$B$KZ%3!<%I$,$"$j$^$9$M!#e(B
[] e$B$^$G$O4{B8$Ne(B enumerator e$B$G$$$1$k$H;W$&$N$G$9$,!“e(B []=
e$B$O30$l$k$N$G!”$3e(B
e$B$l$r$I$N$h$&$J%$%s%?!<%U%’%$%9$K$7!"$I$&4{B8$Ne(B enumerator
e$B$H6hJL$7$D$D0le(B
e$BHL2=$9$k$+$,LdBj$J5$$,$7$^$9!#e(B

e$B@.@%$G$9!#e(B

Hidetoshi NAGAI wrote:

$KCODE e$B$r;H$&$h$&$K!$I,MW$J%a%=%C%I$r$9$Y$Fe(B wrap e$B$9$k$H$$$&$N$Oe(B

e$B$"$^$j$K$bO+NO$,3d$K9g$o$J$$$N$G!$EvA39M$($F$O$*$i$l$^$;$s$h$M!)e(B

e$B$=$3$^$G$7$J$/$F$b!"e(B-Ke e$B$r;XDj$9$l$Pe(B 1.9
e$B$N%a%=%C%I$OBP1~$7$^$9$+$i!#e(B

e$B$=$N%i%$%V%i%j$K<j$rF~$l$k$7$+$J$$$G$9$h$M!%e(B
e$B;d$,$^$?2?$+4*0c$$$7$F$$$k$N$G$7$g$&$+!)e(B

e$B%V%m%C%/$r<u$1<h$k%a%=%C%I$NOC$G$9!#e(B

e$B$"$H$=$&$$$($P!"e(BRuby e$B$Oe(B Open Class
e$B$J$N$G!“30$+$i%i%$%V%i%j$N%a%=%C%I$re(B
e$B=q$-49$($F$7$^$&$H$$$&<j$b$”$C$?$j$O$7$^$9$M!#e(B

e$B$4$a$s$J$5$$!%e(Bnkf e$B$OC1$J$kNc$J$N$G$5$7$F=EMW$G$O$"$j$^$;$s!%e(B
1.8 e$BM3Mh$N%i%$%V%i%jFbIt$Ge(B nkf e$B$J$I$NJL$NJ8;zNs=hM}%i%$%V%i%j$J$je(B
e$BAH$9~$%a%=%C%I$J$j$r8F$S=P$9:]!$e(B
e$B$=$Ne(B 1.8 e$BM3Mh$N%i%$%V%i%j$Oe(B encoding e$B$J$s$F$b$N$rCN$j$^$;$s$+$ie(B
e$B2?$i$+$Ne(B encoding e$B$r2>Dje(B or e$BA[Dj$7$FJ8;zNs$r@8@.$7!$=hM}$r0MMj$7$^$9!%e(B
e$B$3$N$H$-e(B encoding e$B$,;XDj$5$l$F$O$$$J$$$7!$e(B
magic comment e$B$J$s$+$bF~$C$F$$$^$;$s$+$i!$e(B
ASCII-8BIT e$B$GJ8;zNs$,@8@.$5$l$k2DG=@-$,9b$$$N$G$9$h$M!)e(B

nkf e$B$NNc$G2?$r;X$=$&$H$7$F$$$k$N$+$,$h$/$o$+$i$J$$$N$G$9$,!"e(B
e$B%(%s%3!<%G%#%s%0$r;2>H$7$J$,$i2?$+$9$k%i%$%V%i%j$H$$$&<q;]$G$9$+!)e(B
nkf e$B$G$OFC<l$9$.$FNc$H$7$FITE,@Z$J5$$,$7$^$9!#e(B

e$BB?$/$N>l9g$Oe(B US-ASCII e$B$+e(B ASCII-8BIT e$B$K$J$k$G$7$g$&$M!#e(B

1.8 e$BHG$Ge(B 1.8 e$BE*$KF0:n$9$k$b$Ne(B (encoding e$B$rMxMQ$9$k$h$&$Je(B
(e$BCfN,e(B)
e$B%i%$%V%i%j$NA[Dje(B encoding e$B$K9g$o$;$Fe(B
e$BLa$C$F$-$?J8;zNs$KBP$7$Fe(B force_encoding e$B$9$l$Pe(B
e$B3N$+$K$J$s$H$+BP=h$G$-$k$G$7$g$&!%e(B

-Kn e$B$r$D$1$F$$$k%1!<%9$G$O$=$&$@$H;W$$$^$9!#e(B-Ke
e$BEy$r$D$1$F$$$k$H>/!9OC$Oe(B
e$BJQ$o$k$+$b$7$l$^$;$s!#e(B

 (ASCII-8BIT e$B$O%i%$%V%i%j$,A[Dj$7$F$$$ke(B encoding e$B$G$O$J$$e(B)

e$B>e5-e(B (3) e$B$N>l9g$O!$=hM}$K$h$C$F$OITE,@Z$J7k2L$H$J$k$+$b$7$l$^$;$s!%e(B
e$BLaCM$Ne(B encoding e$B$OB?J,e(B ASCII-8BIT e$B$H$J$k$G$7$g$&!%e(B
e$B>e5-e(B (4) e$B$N>l9g$O!$2?$rJV$9$3$H$K$J$k$+$o$+$j$^$;$s!%e(B(^_^;

e$B$3$N>l9g!"e(B-K e$B$,;XDj$5$l$F$$$k$+$KBg$-$/0MB8$7$^$9!#e(B-Kn
e$B$J$i$PB?$/$N@[email protected](B
e$B$5$l$?J8;zNs$Oe(B ASCI-8BIT e$B$K$J$k$?$a!“e(BASCII-8BIT
e$B$GA4BN$rE}0l$G$-$k$+$,%+e(B
e$B%.$K$J$j$^$9!#$3$N:]!”%P%$%HC10L$G$J$/J8;zC10L$G=hM}$r9T$&%3!<%I$,:.$6$Ce(B
e$B$F$$$k$HFq$7$/$J$j$^$9!#e(B

e$B0lJ}!“e(B-Ke e$B$,;XDj$5$l$F$$$k>l9g$OA4BN$re(B EUC-JP
e$B$GE}0l$G$-$k$+$,%+%.$H$J$je(B
e$B$^$9!#$3$N:]!”%P%$%HC10L$G=hM}$r9T$&%3!<%I$,:.$6$C$F$$$k$H$=$N<~JU$G$3$1e(B
e$B$d$9$/$J$j$^$9!#!Je(B[ruby-list:44536] e$B$NNc$G$9$M!Ke(B

e$B:G8e$Ke(B 1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$rMxMQ$9$k%1!<%9$G$9!%e(B
1.8 e$BM3Mh$N%i%$%V%i%j$G@8@.$5$l$?e(B ASCII-8BIT e$BJ8;zNs$,EO$5$l$k>l9g!$e(B
1.9 e$BHG$Ne(B nkf e$B$N$h$&$J$b$N$O$=$Ne(B encoding e$B$r?.$8$F=hM}$r9T$&$O$:$G$9!%e(B
e$B$G$9$,!$e(B1.8 e$BM3Mh$N%i%$%V%i%j$,A[Dj$7$F$$$ke(B encoding e$B$Oe(B
ASCII-8BIT e$B$G$O$"$j$^$;$s$+$i!$7k2L$O!$e(B
(1) e$BNc30H/@8e(B
(2) e$BNc30$O@8$8$J$$$,!$e(BASCII-8BIT e$B$N$^$^e(B (e$BITE,@Z$K!)e(B) e$B=hM}$5$l!$e(B
e$B2?$i$+$Ne(B encoding (ASCII-8BIT?) e$B$GJV$ke(B
e$B$H$$$&$H$3$m$+$b$7$l$^$;$s!%e(B
e$B!V$?$^$?$^$&$^$/!W$H$$$&$3$H$,@dBP$K$J$$$H$O8@$$@Z$l$^$;$s$,!%e(B

nkf e$B$N$h$&$J$b$N$G2?$r;X$7$F$$$k$N$+$,$o$+$j$^$;$s$,!“e(B
1.8
e$B;~Be$+$iB8:_$9$k$b$N$G$”$l$P!“L@<(E*$K%(%s%3!<%G%#%s%0$r;XDj$5$;$F$$e(B
e$B$?$O$:$G$”$j!"e(B1.8
e$B$J%i%$%V%i%j$O%(%s%3!<%G%#%s%0$r;XDj$7$F8F$S=P$7$F$$$ke(B
e$B$O$:$G$9!#e(B

e$B$G!"$3$N>l9g!“e(B-Kn
e$B$r$7$F$$$k%1!<%9$G$O=hM}$NFbMF$K$h$C$F$O5_$&$3$H$O6K$ae(B
e$B$F:$Fq$K;W$o$l$^$9!#e(B
“e$B$”$$$&$($*e(B”.force_encoding(“ascii-8bit”).
gsub(“e$B$”$$$&e(B"){|m|m[0].force_encoding(“euc-jp”)}
e$B$H$$$&$h$&$J7A$K5"Ce$9$k%1!<%9$G$OFq$7$=$&$G$9!#e(B

-Ke e$BEy$N>l9g$O>e=R$Ne(B EUC-JP
e$B$GE}0l2DG=$+$H$$$&OC$G$9$M!#$3$A$i$N>l9g$O!“e(B
“e$B$”$$$&e(B” + 0xA4.chr + 0xA8.chr e$B$H$+$,$"$k$HFq$7$$$+$J!#e(B

e$B8+Mn$H$7$,$"$j$=$&$J5$$b$7$F$$$^$9$,!$e(B
UNDEFINED-8BIT + default_undefind e$B$J$ie(B
e$B>e5-$N$9$Y$F$r$+$J$j$N3NN($G5_:Q$G$-$=$&$J5$$,$7$^$9!%e(B

e$B$3$l$G5_:Q$G$-$k$N$O!“J8;zC10L$G$N=hM}$+!”%P%$%HC10L$G$N=hM}$+!"$I$A$i$+e(B
e$B$KE}0l$5$l$F$$$k%1!<%9$K8B$k$H;W$$$^$9!#$=$N$h$&$J%1!<%9$G$O!"%(%s%3!<e(B
e$B%G%#%s%0L$;XDj$G@8@.$5$l$?J8;zNs$re(B -K
e$B$G;XDj$5$l$?%(%s%3!<%G%#%s%0$K$7$Fe(B
e$B$7$^$C$?J}$,%9%^!<%H$G$7$g$&!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33425] Re: str[idx] = nume$B!#e(Bstr.encoding
== nil”
on Mon, 28 Jan 2008 00:20:05 +0900, take_tk [email protected]
writes:

|e$B!J#3!K$H$3$m$G!“B?%P%$%HJ8;z$G$Ne(B String#ord e$B$O2?$rJV$9$N$G$7$g$&$+e(B
|
|e$B#A!%#1%P%$%HL$N?tCMe(B
|e$B#B!%B?%P%$%HJ8;z$N$”$H$N%P%$%H$rC1=c$Ke(B 256 e$BG$7$F2C;;$7$??tCM!#e(B
|e$B#C!%2?$i$+$NE}0lE*$JJ8;z%3!<%Ie(B
|
|e$B!v!!M=A[$H$7$F$O#B$+$J!)e(B

Ce$B$G$9$M!#%^%k%A%P%$%HJ8;z$KBP1~$9$k%3!<%I%]%$%s%H$rJV$7$^$9!#e(B

e$B$?$1e(B(tk)e$B$G$9!#e(B

[ruby-dev:33413] Re: str[idx] = nume$B!#e(Bstr.encoding == nil
e$B$K$Fe(B
“NARUSE, Yui” [email protected] e$B$5$se(B e$B[)$/e(B:

encodinge$B$K$h$C$F%P%$%J%jG[Ns07$$$r$b$&$1$k$N$J$i!"e(B
str.encoding = nil e$B$N$H$-$K%P%$%J%jG[Ns07$$$K$9$k$H$$$&$N$O$I$&$G$7$g$&e(B
e$B$+!)e(B

str.encoding e$B$,e(B ASCII-8BIT e$B$,%P%$%J%jG[Ns07$$$N$O$:$G$9!#e(B

e$B$@$$$?$$G<F@$7$^$7$?!#%P%$%J%jG[Ns$H$7$F07$$$?$$>l9g$K$Oe(B

e$B%(%s%3!<%I$re(B ASCII-8BIT e$B$K$7$F$+$i!"e(B
e$BBeF~$9$k$H$-$K$Oe(B

str[idx]=num
str[idx]=chr

e$B$I$A$i$G$b$h$/$F!"e(B
e$B;2>H$9$k$H$-$K$Oe(B

str[idx] #=> chr

e$B$OJ8;z$rJV$9$N$G!"e(Bnume$B$GM_$7$1$l$P!"e(BString#ord e$B$r;H$C$Fe(B

str[idx].ord #=> num

e$B$H$7$m!"$H$$$&$3$H$G$9$M!#e(B

temp = s.encoding
s.force_encoding(‘ASCII-8BIT’)
s[2] = “a”
s[3] = 101
p s[2] #=> “a”
p s[3].ord #=> 101
s.force_encoding(temp)

e$B!J#1!KDs0F$7$?$N$O!“e(Bencoding==nil
e$B$H$$$&$N$r5v$7$F!”$=$N>l9g$K$O!“e(BFixnum
e$B$G$N=P$7F~$l$K$9$k!”$H$$$&e(B1.8e$B%3%s%Q%A%P!<%8%g%s$rMQ0U$7$F$O$I$&$+!“$H$$e(B
e$B$&$3$H$G$7$?!#e(Bencoding e$B$,!V$J$$!'e(Bnile$B!W$J$ie(B 1.8
e$B$H%3%s%Q%A!”$H$$$&H/A[$G$9!#e(B

e$B%3%s%Q%A%b!<%I$,$"$l$P!"e(Bs[3] e$B$G;2>H$7$F$$$kItJ,$re(B s[3].ord
e$B$KJQ99$9$kI,e(B
e$BMW$,$J$/$J$k!#e(B

e$B!J#2!K$H$3$m$G!"$3$NJ}K!$@$H!“e(Bruby1.8 e$B$G$Oe(B s[3]
e$B$Oe(BFixnum e$B$rJV$9$N$G!”%(e(B
e$B%i!<$K$J$C$F$7$^$$$^$9!#e(Bs[3].ord
e$B$G%(%i!<$K$J$i$J$$$h$&$K$9$k$?$a$K$O!“e(B
Integer#ord e$B$rDj5A$7$F$*$/$N$,$h$$!”$H$$$&$3$H$K$J$k$N$G$7$g$&$+!)e(B

e$B!ve(B String#force_encoding e$B$J$I$O%@%_!<%a%=%C%I$rMQ0U$9$k!#e(B

[ruby-dev:32206] Integer#ord for 1.8

e$B$G!"$9$G$KDs0F$5$l$F$$$^$7$?$M!#F~$k$s$G$7$g$&$+!)e(B

e$B!J#3!K$H$3$m$G!"B?%P%$%HJ8;z$G$Ne(B String#ord
e$B$O2?$rJV$9$N$G$7$g$&$+e(B

e$B#A!%#1%P%$%HL$N?tCMe(B
e$B#B!%B?%P%$%HJ8;z$N$"$H$N%P%$%H$rC1=c$Ke(B 256
e$BG$7$F2C;;$7$??tCM!#e(B
e$B#C!%2?$i$+$NE}0lE*$JJ8;z%3!<%Ie(B

e$B!v!!M=A[$H$7$F$O#B$+$J!)e(B

take_tk = kumagai hidetake

In article [email protected],
e$BM73Z0Ce(B [email protected] writes:

e$B7W;;$,$9$C$-$j=q$1$^$;$s!#e(B

e$B$J$k$[$I!#e(B

e$BJ8;zNs$H%P%$%HNs$,%l%$%d$N0c$&OC$J$N$O$o$+$j$^$9$7!"e(B
e$BGSB>E*$@$H$b;W$C$F$$$^$;$s!#e(B

e$B$=$l$O<:Ni$7$^$7$?!#e(B

e$B$?$@!“e(BStringe$B$NJ8;zNs$X$N79<P$,$”$^$j$K$b2a7c$J$N$Ge(B
e$B%P%$%J%j%G!<%?$O$I$&$J$C$A$c$&$Ne(B??
e$B$H;W$C$F$$$^$9!#e(B
e$BMW$9$k$K!V%P%i%s%90-$/$J$$e(B??e$B!W$H$$$&46$8$G$7$g$&$+!#e(B

e$B$U$`!#e(B

e$B6M@8$5$s$NNc$r0z$/$^$G$b$J$/!"%P%$%J%j%G!<%?$r%U%!%$%k$+$ie(B
e$BFI$_9~$s$G7W;;$r$9$k$H$$$&=hM}$O0lHLE*$@$H;W$&$N$G$9!#e(B
String#[]e$B$^$GJ8;zNs$K$J$C$Fe(B
e$B$=$l$r$9$C$-$j=q$/J}K!$O$J$/$J$C$F$7$^$$$^$7$?!#e(B

e$B;d$N7P83$H$7$F$O!"$=$s$J$KB?$/$O$J$$$G$9$1$I$M$'!#e(B

e$B$^$!!"%P%$%H$@$1$8$c$J$/$FJ8;z$N$[$&$b$=$s$J$KB?$/$J$$5$$,$7e(B
e$B$^$9$,!#e(B

e$BEDCf$5$s$N!V%l%$%d!W$H$$$&%-!<%o!<%I$G;W$$$D$$$?$N$G$9$,!"e(B
e$B$$$C$=$N$3$H$=$N35G0$N%l%$%d$r%/%i%93,AX$GI=8=$7$A$c$C$?$i$I$&$G$7$g$&$M!#e(B

e$B%P%$%HNs$H$7$F%“%/%;%9$9$k$+J8;zNs$H$7$F%”%/%;%9$9$k$+$H$$$&e(B
e$B0U?^$r%/%i%9$GI=8=$9$k$H!“%*%V%8%'%/%H$r@8@.$9$k%?%$%_%s%0$Ge(B
e$B0U?^$r7h$a$kI,MW$,$”$j$^$9!#e(B

e$B$7$+$7!“e(B[ruby-dev:33331] e$B$G=R$Y$?$h$&$K!“e(BString
e$B$K$O%P%$%HNse(B
e$BE*$JB&LL$,>o$K$”$k$H9M$($k$H!”$=$N%?%$%_%s%0$G7hDj$9$k$N$O8Ge(B
e$BDjE2a$.$^$9!#N>J}$NB&LL$,$“$k$N$G$9$+$i!”%%V%8%'%/%H$r@[email protected](B
e$B$7$?8e$N!"<B:]$K;H$&CJ3,$G$I$NB&LL$r$$$8$k$+7hDj$G$-$F$b$$$$e(B
e$B$O$:$G$9!#e(B

e$B$H$$$&$o$1$G!“$`$7$me(B String e$B$K%P%$%HC10L$K%”%/%;%9$9$k%a%=%Ce(B
e$B%I$r$D$1$?$[$&$,e(B String e$B$K$O%P%$%HNs$HJ8;zNs$NN>J}$NB&LL$,$"e(B
e$B$k$3$H$rAGD>$KI=8=$G$-$F$$$k$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$?$@!“e(B[] e$B$He(B []=
e$B$O$R$H$D$N%/%i%9$K$R$H$D$7$+$J$$$N$G!”%P%$%He(B
e$BNs$HJ8;zNs$NN>J}$G;H$&$H$$$&$N$O$?$7$+$K:$Fq$G$9!#$I$&$7$F$be(B
[], []= e$B$r;H$$$?$$>l9g$Oe(B [], []= e$B$+$ie(B byte, set_byte
e$B$K0Q>ye(B
e$B$9$k%*%V%8%‘%/%H$r:n$k$H$+$O$I$&$G$9$+$M$’!#e(B

In article [email protected],
Yukihiro M. [email protected] writes:

e$B$_$J$5$s$O$I$&;W$$$^$9!)e(B e$B;d$OHsBP>N@-$,5$$K$J$k$N$G!"e(B

  • b=s.bytes; b[1] = b[1]+1
  • s.byte(1)=s.byte(1)+1
  • s.set_byte(1,s.byte(1)+1)

e$B$N$h$&$J$N$,$$$$$+$J$"$H;W$C$F$^$9$,!#e(B

String#byte e$B$He(B String#set_byte e$B$J$i$3$s$J$G$9$+$M!#e(B

e$B$G$b!"e(BString#byte e$B$C$Fe(B String#bytes
e$B$HL>A0$,;w$9$.$F$^$;$s$+e(B
e$B$M!#e(Bget_byte e$B$K$7$Fe(B bytes
e$B$H$ON%$7$?$[$&$,$$$$$h$&$J46$8$,e(B
e$B$A$g$C$H!#e(B

Index: string.c

— string.c (revision 15281)
+++ string.c (working copy)
@@ -3074,6 +3074,49 @@ rb_str_chr(VALUE str)

/*

  • call-seq:
    • str.byte(index)          => 0 .. 255
      
    • returns the indexth byte as an integer.
  • */
    +static VALUE
    +rb_str_byte(VALUE str, VALUE index)
    +{
  • long pos = NUM2LONG(index);
  • if (pos < 0)
  •    pos += RSTRING_LEN(str);
    
  • if (pos < 0 || RSTRING_LEN(str) <= pos)
  •    return Qnil;
    
  • return INT2FIX((unsigned char)RSTRING_PTR(str)[pos]);
    +}

+/*

    • call-seq:
    • str.set_byte(index, int) => int
      
    • modifies the indexth byte as int.
  • */
    +static VALUE
    +rb_str_set_byte(VALUE str, VALUE index, VALUE value)
    +{
  • long pos = NUM2LONG(index);
  • int byte = NUM2INT(value);
  • rb_str_modify(str);
  • if (pos < -RSTRING_LEN(str) || RSTRING_LEN(str) <= pos)
  •    rb_raise(rb_eIndexError, "index %ld out of string", pos);
    
  • if (pos < 0)
  •    pos += RSTRING_LEN(str);
    
  • RSTRING_PTR(str)[pos] = byte;
  • return value;
    +}

+/*

    • call-seq:
    • str.reverse   => new_str
      
    • Returns a new string with the characters from str in reverse
      order.
      @@ -6054,6 +6097,8 @@ Init_String(void)
      rb_define_method(rb_cString, “replace”, rb_str_replace, 1);
      rb_define_method(rb_cString, “clear”, rb_str_clear, 0);
      rb_define_method(rb_cString, “chr”, rb_str_chr, 0);
  • rb_define_method(rb_cString, “byte”, rb_str_byte, 1);

  • rb_define_method(rb_cString, “set_byte”, rb_str_set_byte, 2);

    rb_define_method(rb_cString, “to_i”, rb_str_to_i, -1);
    rb_define_method(rb_cString, “to_f”, rb_str_to_f, 0);

e$B@.@%$G$9!#e(B

NARUSE, Yui wrote:

Integer.ord e$B$H$$$&H/A[$,$@$$$V%"%l$K46$8$k$s$G$9$,!&!&!&!#$9$G$KB8:_$9$ke(B
?a e$B$re(B ?a.ord e$B$K=q$-49$($?>e$Ge(B Integer#ord e$B$rDI2C$9$k$/$i$$$@$C$?$i!"e(B
“a”.ord e$B$K=q$-49$($?>e$G!"e(BString#ord e$B$rDI2C$9$k$Y$-$@$H;W$$$^$9$h!#e(B

e$B$C$F!"3NG’$7$?$ie(B ruby_1_8 e$B$G4{$KF~$C$F$^$9$M!#e(B
e$B%9%l%C%I$NB3$-$r8+$FG<F@$7$^$7$?!#e(B

e$B@.@%$G$9!#e(B

take_tk wrote:

e$B;2>H$9$k$H$-$K$Oe(B

str[idx] #=> chr

e$B$3$l$O$=$&$G$9!#e(B

nume$B$GM_$7$1$l$P!"e(BString#ord e$B$r;H$C$Fe(B

str[idx].ord #=> num

e$B$H$7$m!"$H$$$&$3$H$G$9$M!#e(B

e$B8=:_$O$=$&$J$j$^$9$M!#e(B
str.bytes[idx] e$B$H$$$C$?7A$Ne(B API e$B$b8!F$Cf$N$h$&$G$9!#e(B

e$B$&$3$H$G$7$?!#e(Bencoding e$B$,!V$J$$!'e(Bnile$B!W$J$ie(B 1.8 e$B$H%3%s%Q%A!"$H$$$&H/A[$G$9!#e(B
encoding e$B$K$h$C$FLa$jCM$N%/%i%9$,0c$&$N$O:.Mp$7$^$;$s$+!#e(B

e$B%3%s%Q%A%b!<%I$,$"$l$P!"e(Bs[3] e$B$G;2>H$7$F$$$kItJ,$re(B s[3].ord e$B$KJQ99$9$kI,e(B
e$BMW$,$J$/$J$k!#e(B

e$B$3$N<j4V$O5$$K$7$J$$!"$H$$$&$N$,e(B Ruby 1.9
e$B$NJ}?K$@$H;W$$$^$9!#$H$$$&$+!"e(B
s[3] e$B$H$$$&=hM}$Oe(B Ruby 1.9
e$B$N>l9gBgItJ,$,4V0c$C$F$$$k$s$8$c$J$$$+$J$!$He(B
e$B;W$$$^$9!#e(B

e$B$G!"$9$G$KDs0F$5$l$F$$$^$7$?$M!#F~$k$s$G$7$g$&$+!)e(B
Integer.ord
e$B$H$$$&H/A[$,$@$$$V%"%l$K46$8$k$s$G$9$,!&!&!&!#$9$G$KB8:_$9$ke(B
?a e$B$re(B ?a.ord e$B$K=q$-49$($?>e$Ge(B Integer#ord
e$B$rDI2C$9$k$/$i$$$@$C$?$i!"e(B
“a”.ord e$B$K=q$-49$($?>e$G!"e(BString#ord
e$B$rDI2C$9$k$Y$-$@$H;W$$$^$9$h!#e(B

e$B$J$*!"e(Bstring e$B$N>l9g$Oe(B str.slice(idx,1) e$B$Ge(B idx+1
e$BHVL$NJ8;z$,<h$l$k$N$G!"e(B
“hoge”.slice(2,1) e$B$Ge(B 1.9 e$B$G$be(B 1.8 e$B$G$be(B “g”
e$B$rF@$i$l$^$9!#e(B

|e$B!J#3!K$H$3$m$G!“B?%P%$%HJ8;z$G$Ne(B String#ord e$B$O2?$rJV$9$N$G$7$g$&$+e(B
|
|e$B#A!%#1%P%$%HL$N?tCMe(B
|e$B#B!%B?%P%$%HJ8;z$N$”$H$N%P%$%H$rC1=c$Ke(B 256 e$BG$7$F2C;;$7$??tCM!#e(B
|e$B#C!%2?$i$+$NE}0lE*$JJ8;z%3!<%Ie(B
|
|e$B!v!!M=A[$H$7$F$O#B$+$J!)e(B

Ce$B$G$9$M!#%^%k%A%P%$%HJ8;z$KBP1~$9$k%3!<%I%]%$%s%H$rJV$7$^$9!#e(B

e$B!VE}0l!W$7$F$$$J$$$N$G$9$+$ie(B C e$B$G$O$J$$$G$7$g$&!#e(B

D.
e$B$=$NJ8;zNs$N!":G=i$N%^%k%A%P%$%HJ8;z$N!"$=$NJ8;zNs$K$*$1$k%(%s%3!<e(B
e$B%G%#%s%0$N!"%3!<%I%]%$%s%H$,JV$j$^$9!#e(B

e$B@.@%$G$9!#e(B

Nobuyoshi N. wrote:

String::ByteIndexere$B$H$+!#e(B

e$B$"$!!":n$m$&$+$J$!$H;W$C$F$$$?$b$N$,$9$G$K!"$H$$$&$o$1$G0lI<!#e(B

e$B$3$&$$$&$N$rLQA[$7$F$$$F;W$C$?$N$G$9$,!":#$Ne(B Enumerable e$B$He(B
Enumerator e$B$Ne(B
e$B$h$&$K!“e(BIndexable e$B$He(B Indexer
e$B$K0lHL2=$G$-$k$H;W$&$N$G$9$,!”$=$&$$$C$?e(B
e$B%K!<%:$C$F$"$k$N$G$9$+$M$’!#$3$NJ}8~$N@h$K$Oe(B LazyList
e$B$,BT$C$F$$$k$H;W$Ce(B
e$B$F$$$k$N$G$9$,!#e(B

e$B$J$+$@$G$9!#e(B

At Sun, 20 Jan 2008 03:58:32 +0900,
Yukihiro M. wrote in [ruby-dev:33196]:

|s = “abcde”
|s.byte(3) # => 100
|s.byte(3, 101)
|s # => “abcee”

e$BFqE@$O!Ve(Bs.byte(3,101)e$B!W$,$$$^$$$A!VBeF~46!W$,$J$$$H$3$m$G$7$ge(B
e$B$&$+!#J8K!$r3HD%$7$F!Ve(Bs.byte(3)=101e$B!W$r5v$9$h$&$K$9$k$+$J!#e(B

e$B$3$l$O$@$$$VA0$+$i9M$($F$$$k$s$G$9$,!"$+$J$jFq$7$$$H$$$&$+LLE]$=e(B
e$B$&$G$9!#e(B

|
|e$B%$%s%G%C%/%9$K$Oe(BRangee$B$b;XDj$G$-$k$H$$$$$G$9!#e(B

e$B$=$N>l9g$O1&JU$KJ8;zNse(B(e$B$^$?$Oe(BBytes)e$B$r;XDj$9$k$o$1!)e(B

e$B$=$&$$$($P!"<+J,$G8@$$=P$7$H$$$F$J$s$@$1$IJ#?t7A$JL>A0$N%/%ie(B
e$B%9$C$F$N$O$$$+$,$J$b$N$+!#e(B

String::ByteIndexere$B$H$+!#e(B

Index: string.c

— string.c (revision 15284)
+++ string.c (working copy)
@@ -2405,27 +2405,33 @@ rb_str_aref_m(int argc, VALUE *argv, VAL

static void
-rb_str_splice_0(VALUE str, long beg, long len, VALUE val)
+rb_str_splice_ptr(VALUE str, long beg, long len, const char *vptr, long
vlen)
{
rb_str_modify(str);

  • if (len < RSTRING_LEN(val)) {
  • if (len < vlen) {
    /* expand string */
  • RESIZE_CAPA(str, RSTRING_LEN(str) + RSTRING_LEN(val) - len + 1);
  • RESIZE_CAPA(str, RSTRING_LEN(str) + vlen - len + 1);
    }
  • if (RSTRING_LEN(val) != len) {
  • memmove(RSTRING_PTR(str) + beg + RSTRING_LEN(val),
  • if (vlen != len) {
  • memmove(RSTRING_PTR(str) + beg + vlen,
    RSTRING_PTR(str) + beg + len,
    RSTRING_LEN(str) - (beg + len));
    }
  • if (RSTRING_LEN(val) < beg && len < 0) {
  • if (vlen < beg && len < 0) {
    MEMZERO(RSTRING_PTR(str) + RSTRING_LEN(str), char, -len);
    }
  • if (RSTRING_LEN(val) > 0) {
  • memmove(RSTRING_PTR(str)+beg, RSTRING_PTR(val), RSTRING_LEN(val));
  • if (vlen > 0) {
  • memmove(RSTRING_PTR(str)+beg, vptr, vlen);
    }
  • STR_SET_LEN(str, RSTRING_LEN(str) + RSTRING_LEN(val) - len);
  • STR_SET_LEN(str, RSTRING_LEN(str) + vlen - len);
    if (RSTRING_PTR(str)) {
    RSTRING_PTR(str)[RSTRING_LEN(str)] = ‘\0’;
    }
    +}

+static void
+rb_str_splice_0(VALUE str, long beg, long len, VALUE val)
+{

  • rb_str_splice_ptr(str, beg, len, RSTRING_PTR(val),
    RSTRING_LEN(val));
    OBJ_INFECT(str, val);
    }
    @@ -4666,16 +4672,195 @@ rb_str_each_line(int argc, VALUE *argv,

+static VALUE rb_str_each_byte(VALUE str);
+
+static VALUE rb_cByteIndexer;
+
+struct byte_indexer {

  • VALUE str;
  • long offset, length;
    +};

+static void
+bidx_mark(void *ptr)
+{

  • struct byte_indexer *bp = ptr;
  • rb_gc_mark(bp->str);
    +}

+static struct byte_indexer *
+bidx_ptr(VALUE self)
+{

  • struct byte_indexer *ptr;
  • Data_Get_Struct(self, struct byte_indexer, ptr);
  • if (RDATA(self)->dmark != bidx_mark) {
  • rb_raise(rb_eArgError, “ByteIndexer expected”);
  • }
  • return ptr;
    +}

+static VALUE
+rb_byte_indexer(VALUE str, long offset, long length)
+{

  • struct byte_indexer *ptr;
  • VALUE indexer = Data_Make_Struct(rb_cByteIndexer, struct
    byte_indexer,
  •         bidx_mark, -1, ptr);
    
  • ptr->str = str;
  • ptr->offset = offset;
  • ptr->length = length;
  • return indexer;
    +}

+static VALUE
+bidx_aref(int argc, VALUE *argv, VALUE self)
+{

  • struct byte_indexer *ptr = bidx_ptr(self);
  • VALUE str = ptr->str;
  • long beg, len, offset = ptr->offset, length = ptr->length;
  • if (length < 0) {
  • length += RSTRING_LEN(str) + 1;
  • }
  • if (offset + length > RSTRING_LEN(str)) {
  • length = RSTRING_LEN(str) - offset;
  • }
  • if (argc == 2) {
  • beg = NUM2LONG(argv[0]) + offset;
  • len = NUM2LONG(argv[1]);
  •  range:
    
  • if (len < 0) return Qnil;
  • if (!length) {
  •  len = 0;
    
  • }
  • if (beg < 0) {
  •  if (len > -beg) len = -beg;
    
  •  beg += length;
    
  •  if (beg < 0) return Qnil;
    
  • }
  • else if (beg > length) {
  •  return Qnil;
    
  • }
  • return rb_byte_indexer(str, beg, len);
  • }
  • else if (argc != 1) {
  • rb_raise(rb_eArgError, “wrong number arguments (%d for 1)”, argc);
  • }
  • if (!FIXNUM_P(argv[0])) {
  • switch (rb_range_beg_len(argv[0], &beg, &len, length, 0)) {
  • case Qfalse:
  •  break;
    
  • case Qnil:
  •  return Qnil;
    
  • default:
  •  goto range;
    
  • }
  • }
  • beg = FIX2INT(argv[0]);
  • if (beg >= length) return Qnil;
  • return INT2FIX(RSTRING_PTR(str)[beg + offset]);
    +}

+static VALUE
+byte_array(VALUE ary)
+{

  • long i;
  • VALUE str = rb_str_tmp_new(RARRAY_LEN(ary));
  • for (i = 0; i < RARRAY_LEN(ary); ++i) {
  • VALUE n = RARRAY_PTR(ary)[i];
  • RSTRING_PTR(str)[i] = NUM2CHR(n);
  • }
  • return str;
    +}

+static VALUE
+bidx_aset(int argc, VALUE *argv, VALUE self)
+{

  • struct byte_indexer *ptr = bidx_ptr(self);
  • VALUE str = ptr->str, val, ary;
  • long beg, len, slen;
  • rb_str_modify(str);
  • slen = RSTRING_LEN(str);
  • switch (argc) {
  •  case 3:
    
  • beg = NUM2LONG(argv[0]);
  • len = NUM2LONG(argv[1]);
  • if (len < 0) rb_raise(rb_eIndexError, “negative length %ld”, len);
  • if (beg < 0 ? (beg += slen) < 0 : beg > slen) {
  •  rb_raise(rb_eIndexError, "index %ld out of string", beg);
    
  • }
  • val = argv[2];
  • break;
  •  case 2:
    
  • if (!rb_range_beg_len(argv[0], &beg, &len, slen, 0)) {
  •  beg = NUM2LONG(argv[0]);
    
  •  len = 1;
    
  • }
  • val = argv[1];
  • break;
  •  default:
    
  • rb_raise(rb_eArgError, “wrong number of arguments (%d for 2)”, argc);
  • }
  • if (!NIL_P(ary = rb_check_array_type(val))) {
  • rb_str_splice_0(str, beg, len, byte_array(ary));
  • }
  • else {
  • char byte = NUM2CHR(val);
  • rb_str_splice_ptr(str, beg, len, &byte, 1);
  • }
  • return argv[argc - 1];
    +}

+static VALUE
+bidx_each(VALUE self)
+{

  • struct byte_indexer *ptr = bidx_ptr(self);
  • VALUE str = ptr->str;
  • long i, l;
  • if (!rb_block_given_p()) return self;
  • for (l = (i=ptr->offset) + ptr->length; i<l && i<RSTRING_LEN(str);
    i++) {
  • rb_yield(INT2FIX(RSTRING_PTR(str)[i] & 0xff));
  • }
  • return str;
    +}

+static void
+Init_ByteIndexer(void)
+{

  • rb_cByteIndexer = rb_define_class_under(rb_cString, “ByteIndexer”,
    rb_cData);
  • rb_include_module(rb_cByteIndexer, rb_mEnumerable);
  • rb_undef_alloc_func(rb_cByteIndexer);
  • rb_define_method(rb_cByteIndexer, “[]”, bidx_aref, -1);
  • rb_define_method(rb_cByteIndexer, “[]=”, bidx_aset, -1);
  • rb_define_method(rb_cByteIndexer, “each”, bidx_each, 0);
    +}

/*

  • Document-method: bytes
  • call-seq:
    • str.bytes   => anEnumerator
      
    • str.bytes   => anIndexer
      
    • str.bytes {|fixnum| block }    => str
      
    • Returns an enumerator that gives each byte in the string. If a
      block is
    • given, it iterates over each byte in the string.
    • "hello".bytes.to_a        #=> [104, 101, 108, 108, 111]
      
    • str = "hello"
      
    • str.bytes[0] ^= 0x20
      
    • str       #=> "Hello"
      
    */

+static VALUE
+rb_str_bytes(VALUE str)
+{

  • if (!rb_block_given_p()) return rb_byte_indexer(str, 0, -1);
  • return rb_str_each_byte(str);
    +}

/*

  • Document-method: each_byte
    @@ -6077,5 +6262,5 @@ Init_String(void)
    rb_define_method(rb_cString, “split”, rb_str_split_m, -1);
    rb_define_method(rb_cString, “lines”, rb_str_each_line, -1);
  • rb_define_method(rb_cString, “bytes”, rb_str_each_byte, 0);
  • rb_define_method(rb_cString, “bytes”, rb_str_bytes, 0);
    rb_define_method(rb_cString, “chars”, rb_str_each_char, 0);
    rb_define_method(rb_cString, “reverse”, rb_str_reverse, 0);
    @@ -6183,3 +6368,5 @@ Init_String(void)

    rb_define_method(rb_cSymbol, “encoding”, sym_encoding, 0);

  • Init_ByteIndexer();
    }

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33445] Re: Ruby1.9
Stringe$B!!%P%$%HNs$X$N%$%s%G%C%/%9!!%”%/%;%9e(B"
on Mon, 28 Jan 2008 15:40:28 +0900, “NARUSE, Yui”
[email protected] writes:

|Nobuyoshi N. wrote:
|> String::ByteIndexere$B$H$+!#e(B
|
|e$B$“$!!”:n$m$&$+$J$!$H;W$C$F$$$?$b$N$,$9$G$K!"$H$$$&$o$1$G0lI<!#e(B

e$B$=$&$J$N$+!#e(B

|e$B$3$&$$$&$N$rLQA[$7$F$$$F;W$C$?$N$G$9$,!“:#$Ne(B Enumerable e$B$He(B Enumerator e$B$Ne(B
|e$B$h$&$K!“e(BIndexable e$B$He(B Indexer e$B$K0lHL2=$G$-$k$H;W$&$N$G$9$,!”$=$&$$$C$?e(B
|e$B%K!<%:$C$F$”$k$N$G$9$+$M$'!#$3$NJ}8~$N@h$K$Oe(B LazyList e$B$,BT$C$F$$$k$H;W$Ce(B
|e$B$F$$$k$N$G$9$,!#e(B

Indexablee$B$C$Fe(BEnumerablee$B$_$?$$$Je(Btemplate
patterne$B$,8z$/M>CO$,e(B
e$B$“$^$j$J$$$h$&$J5$$,$9$k$s$G$9$,!#$J$s$+!”!Ve(B[]e$B$,;H$($k$H$=$le(B
e$B$r%Y!<%9$K<BAu$G$-$k%a%=%C%I!W$C$F$"$j$^$7$?$C$1!)e(B

LazyListe$B$C$]$$?J2=$NJ}8~$O%"%j$@$H;W$C$F$O$$$k$N$G$9$,!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33443] Re: Ruby1.9
Stringe$B!!%P%$%HNs$X$N%$%s%G%C%/%9!!%”%/%;%9e(B"
on Mon, 28 Jan 2008 15:18:41 +0900, Nobuyoshi N.
[email protected] writes:

|> e$BFqE@$O!Ve(Bs.byte(3,101)e$B!W$,$$$^$$$A!VBeF~46!W$,$J$$$H$3$m$G$7$ge(B
|> e$B$&$+!#J8K!$r3HD%$7$F!Ve(Bs.byte(3)=101e$B!W$r5v$9$h$&$K$9$k$+$J!#e(B
|
|e$B$3$l$O$@$$$VA0$+$i9M$($F$$$k$s$G$9$,!"$+$J$jFq$7$$$H$$$&$+LLE]$=e(B
|e$B$&$G$9!#e(B

e$BCN$C$F$^$9!#;d$b2?EY$+:C@^$7$F$^$9$+$i!#e(B

|String::ByteIndexere$B$H$+!#e(B

e$B$&!<$s!“$I$&$7$h$&$+$J$”!#@lMQ%/%i%92=$7$?J}$,@-G=$,>e$,$k$He(B
e$B$+$$$$$3$H$b$“$k$s$G$9$,$M$(!#$G$b!“e(Bbytee$B%”%/%;%9$He(Bbytee$BNs5s;Re(B
e$B$rF10l;k$9$k$3$H$K$J$s$H$J$/Dq9346$,$”$j$^$9!#e(B

e$B@.@%$G$9!#e(B

Yukihiro M. wrote:

e$B$=$&$J$N$+!#e(B
e$B$($’!"e(B

|String::ByteIndexere$B$H$+!#e(B

e$B$&!<$s!"$I$&$7$h$&$+$J$"!#@lMQ%/%i%92=$7$?J}$,@-G=$,>e$,$k$He(B
e$B$+$$$$$3$H$b$"$k$s$G$9$,$M$(!#$G$b!“e(Bbytee$B%”%/%;%9$He(Bbytee$BNs5s;Re(B
e$B$rF10l;k$9$k$3$H$K$J$s$H$J$/Dq9346$,$"$j$^$9!#e(B

e$B$H$b4XO"$9$k$N$G$9$,!"$3$3$K$*$1$k!Ve(BIndexere$B!W$O!Ve(BEnumeratore$B!W$NFC<l$J>le(B
e$B9g!"$D$^$j!"%i%s%@%`%"%/%;%92DG=$+$De(B key e$B$,e(B 0
e$B$+$i;O$^$k@0?t$G$"$ke(B
e$B!Ve(BEnumeratore$B!W$K$J$C$F$$$^$9!#$D$^$j!"$^$5$Ke(B Array
e$B$HF1$8e(B API e$B$r;}$C$F$$e(B
e$B$k$o$1$G$9!#e(B

e$BNc$($P!"e(Bbytes e$B$H$$$&$N$O$^$5$K$3$NFC<l$Je(B Enumerator
e$B$K3:Ev$7$^$9!#$^$?e(B
String#chars
e$B$b!V%i%s%@%%"%/%;%92DG=!W$H8@$&$3$H$K$J$C$F$$$k$N$G!"$3$le(B e$B$b!Ve(BIndexablee$B!W$G$9!#e(BArray e$B$J$I$OEvA3$=$&$G$9!#AH$_9~$_!&I8=E:IU%i%$%Ve(B
e$B%i%j$r8+$F$_$k$H!"e(BENV e$B$de(B Dire$B!"e(BRangee$B!"e(Bdbm
e$B$Ke(B gdbme$B!"e(BOrderd Hash e$B$@$C$F$=$&e(B
e$B$G$9!#e(B

e$B5U$K$3$l$KEv$F$O$^$i$J$$e(B Enumerable e$B$Oe(B String#lines
e$B$,HyL/$@$C$?$j!“e(B
mathn e$B$Ne(B Prime e$B$@$C$?$j$H!”<B$O>/?tGI$K8+$($^$9!#e(B

|e$B$3$&$$$&$N$rLQA[$7$F$$$F;W$C$?$N$G$9$,!":#$Ne(B Enumerable e$B$He(B Enumerator e$B$Ne(B
|e$B$h$&$K!“e(BIndexable e$B$He(B Indexer e$B$K0lHL2=$G$-$k$H;W$&$N$G$9$,!”$=$&$$$C$?e(B
|e$B%K!<%:$C$F$"$k$N$G$9$+$M$’!#$3$NJ}8~$N@h$K$Oe(B LazyList e$B$,BT$C$F$$$k$H;W$Ce(B
|e$B$F$$$k$N$G$9$,!#e(B

Indexablee$B$C$Fe(BEnumerablee$B$_$?$$$Je(Btemplate patterne$B$,8z$/M>CO$,e(B
e$B$"$^$j$J$$$h$&$J5$$,$9$k$s$G$9$,!#$J$s$+!"!Ve(B[]e$B$,;H$($k$H$=$le(B
e$B$r%Y!<%9$K<BAu$G$-$k%a%=%C%I!W$C$F$"$j$^$7$?$C$1!)e(B

LazyListe$B$C$]$$?J2=$NJ}8~$O%"%j$@$H;W$C$F$O$$$k$N$G$9$,!#e(B

Indexablee$B$C$Fe(BEnumerablee$B$_$?$$$Je(Btemplate patterne$B$,8z$/M>CO$,e(B
e$B$"$^$j$J$$$h$&$J5$$,$9$k$s$G$9$,!#$J$s$+!"!Ve(B[]e$B$,;H$($k$H$=$le(B
e$B$r%Y!<%9$K<BAu$G$-$k%a%=%C%I!W$C$F$"$j$^$7$?$C$1!)e(B

LazyListe$B$C$]$$?J2=$NJ}8~$O%"%j$@$H;W$C$F$O$$$k$N$G$9$,!#e(B

e$B$H$$$&$o$1$G!"$3$N>l9g$O$?$@$Ne(B getter/setter
e$B$G$J$/!“e(Benumerable e$B$J$H$$$&e(B
e$B8BDj$,$D$/$?$a!”$3$l$K2C$($Fe(B [] e$B$He(B []= e$B$,$"$l$Pe(B Array
e$B$NA4$F$,<BAu2DG=$G$9!#e(B

self[nth] self[start…end] self[start, length] self[nth]=val
self[start…end]=val
self[start, length]=val at fetch slice slice! # e$BDj5A$h$je(B

  • << concat # self[3,0] = val e$B$K=q$-49$($ke(B
  • [0…-1]e$B$r$R$C$Q$C$F$-$F!"e(Bne$B2sB-$9e(B

  • & | # e$B0l$D$:$D8+$ke(B
    <=> == assoc fill flatten include? index join nitems pack rassoc reverse
    reverse_each
    rindex sort indexes to_a to_ary uniq transpose # enumerator
    e$B$G$b<BAu2DG=e(B
    flatten! map! reject! replace reverse! sort! uniq! # enumerator + aset
    e$B$G<BAu2DG=e(B
    clear # str[0…-1] = []
    clone dup to_s # Object
    collect! # enum e$B$7$Fe(B str[0…-1] = e$B$G$D$C$3$`e(B
    compact compact! #enum
    delete delete_at delete_if # e$B$J$a$F$+$ie(B aset
    each each_index # e$BDj5A$h$je(B
    empty? # str[0…-1] e$B$G$o$+$ke(B
    eql? # Object
    first # str[0]
    values_at # str[n] e$B$r8F$Ve(B
    insert str[nth, 0] = val
    last # str[-1]
    length size # e$Bee(B Indexer e$B$OCN$C$F$$$ke(B
    pop # str[-1…-1] = nil
    push # str[len-1, 0] = val
    shift # str[0…0] = nil
    unshift # str[0, 0] = val