knu e$B$5$s$Xe(B
e$B9bHx9(<#$G$9!#e(B
knu e$B$5$s$,e(B r16125 e$B$K$F!"e(B
Readline::HISTORY.each e$B%a%=%C%I$r%V%m%C%/$J$7$G8F$S=P$7$?$H$-$K!"e(B
Enumerable::Enumerator e$B$rJV$9$h$&$K=$@5$5$l$?$HG’<1$7$F$$$^$9!#e(B
e$B$=$N=$@5$Ge(B $SAFE e$B$,e(B 4 e$B$N>l9g$G$b!"e(B
each e$B%a%=%C%I$r8F$S=P$9$3$H$,$G$-$k$h$&$K$J$j$^$7$?!#e(B
e$B$?$V$s!"e(B$SAFE e$B$,e(B 4 e$B$N>l9g$O!“e(B
each e$B%a%=%C%I$r8F$S=P$7$?;~E@$GNc30e(B SecurityError e$B$,e(B
e$BH/@8$7$?$[$&$,$h$$$N$G$O$J$$$+$H;W$$!”%Q%C%A$r:n@.$7$^$7$?!#e(B
knu e$B$5$s$K=$@5FbMF$r3NG’$$$?$@$-!“e(B
e$BLdBj$,$J$$$h$&$G$”$l$P%3%_%C%H$7$?$$$H9M$($F$$$^$9!#e(B
e$B$$$+$,$G$7$g$&$+!#e(B
e$B$J$*!"8=:!"e(B$SAFE e$B$,e(B 4 e$B$N>l9g$Ke(B
each e$B%a%=%C%I$r%V%m%C%/$J$7$G8F$S=P$9$3$H$O$G$-$^$9$,!"e(B
e$BJV$jCM$Ne(B Enumerable::Enumerator
e$B$KBP$7$F%a%=%C%I8F$S=P$7$r$9$k$H!"e(B
e$BNc30e(B SecurityError e$B$,H/@8$7$^$9!#e(B
e$B$3$N$?$a!"Nc30$,H/@8$9$k%?%$%%s%0$,CY$$$H$$$&$@$1$G!"e(B
e$B<B32$O$J$$$H9M$($F$$$^$9!#e(B
e$B0J2<$NNc$G$O!"%Q%C%AE,MQ8e$Oe(B(1)e$B$GNc30$,H/@8$7!"e(B
e$B%Q%C%AE,MQA0$Oe(B(2)e$B$GNc30$,H/@8$7$^$9!#e(B
require “readline”
Readline::HISTORY.push(“a”, “b”, “c”)
$SAFE = 4
e = Readline::HISTORY.each # (1)
e.each do |s| # (2)
p s
end
e$B0J>e$G$9!#e(B
----- e$B$3$3$+$ie(B -----
Index: ext/readline/readline.c
— ext/readline/readline.c (revision 18314)
+++ ext/readline/readline.c (working copy)
@@ -640,9 +640,8 @@
HIST_ENTRY *entry;
int i;
- RETURN_ENUMERATOR(self, 0, 0);
- rb_secure(4);
- RETURN_ENUMERATOR(self, 0, 0);
for (i = 0; i < history_length; i++) {
entry = history_get(history_get_offset_func(i));
if (entry == NULL)
Index: test/readline/test_readline_history.rb
===================================================================
— test/readline/test_readline_history.rb (revision 18314)
+++ test/readline/test_readline_history.rb (working copy)
@@ -48,6 +48,7 @@
[“push”, [“s”]],
[“pop”, []],
[“shift”, []],
-
["each", []],
["length", []],
["delete_at", [0]],
["clear", []],
e$B@>;3OB9-$G$9!#e(B
At Sat, 2 Aug 2008 00:50:00 +0900,
Takao K. wrote:
require “readline”
Readline::HISTORY.push(“a”, “b”, “c”)
$SAFE = 4
e = Readline::HISTORY.each # (1)
e.each do |s| # (2)
p s
end
require “readline”
Readline::HISTORY.push(“a”, “b”, “c”)
e = nil
proc {
$SAFE = 4
e = Readline::HISTORY.each # (1)
}.call
e.each do |s| # (2)
p s
end
e$B$N$h$&$J>l9g$N5sF0$,JQ$o$j$=$&$G$9!#e(B
e$B9bHx9(<#$G$9!#e(B
On 2008/08/03, at 1:38, Kazuhiro NISHIYAMA wrote:
e$B%Q%C%AE,MQA0$Oe(B(2)e$B$GNc30$,H/@8$7$^$9!#e(B
Readline::HISTORY.push(“a”, “b”, “c”)
e = nil
proc {
$SAFE = 4
e = Readline::HISTORY.each # (1)
}.call
e.each do |s| # (2)
p s
end
e$B$N$h$&$J>l9g$N5sF0$,JQ$o$j$=$&$G$9!#e(B
e$B$4;XE&$NDL$j$G$9$M!#e(B
e$B%Q%C%AE,MQA0$O!"@>;3$5$s$NNc$G$O%R%9%H%j$NMzNr$r<hF@$G$-$F$7$^$$$^$9$M!#e(B
e$B85!9$NA0ED$5$s$,=q$+$l$?e(B Readline::HISTORY.each
e$B%a%=%C%I$G$O!“e(B
$SAFE=4 e$B$G$”$l$PNc30e(B SecurityError e$B$rH/@8$5$;$k$3$H$re(B
e$B0U?^$5$l$F$$$?$N$G$O$J$$$+$H;W$$$^$9!#e(B
knu e$B$5$s$,e(B Enumerable::Enumerator
e$B$rJV$9$h$&$K=$@5$5$l$?$H$-$Ke(B
e$B5sF0$,JQ$o$C$?$H9M$($i$l$^$9!#e(B
e$B$D$^$j!"@>;3$5$s$NNc$G!“e(B
e$B%R%9%H%j$NMzNr$r<hF@$G$-$k$3$H$O%P%0$N2DG=@-$,$”$j$^$9!#e(B
e$B;d$N=$@5$K$h$j!"85!9$Ne(B Readline::HISTORY.each e$B%a%=%C%I$Ne(B
$SAFE=4 e$B$N$H$-$NA[DjDL$j$K$J$k$H9M$($F$$$^$9!#e(B
At Sat, 2 Aug 2008 00:50:00 +0900,
Takao K. wrote:
ã„ã‹ãŒã§ã—ょã†ã‹ã€‚
 ç¾åœ¨ã®ã¨ã“ã‚ã€åŒæ§˜ã®ãƒ¡ã‚½ãƒƒãƒ‰(多数)ã«é–¢ã—ã¦ã€å¼•æ•°ãƒã‚§ãƒƒã‚¯ãŠã‚ˆã³
$SAFE ãƒã‚§ãƒƒã‚¯ã‚’(Enumerator 生æˆã®)å‰ã«è¡Œã†ã‹ã©ã†ã‹ã¯çµ±ä¸€ã•れã¦
ã„ã¾ã›ã‚“。
 メソッド冒é ã¸ã® RETURN_ENUMERATOR() ã®è¿½åŠ ã®ã¿ã§æ¸ˆã¾ã›ã‚‹ã“ã¨ã§
ãŸã¾ãŸã¾å‘¼å‡ºæ™‚ãƒã‚§ãƒƒã‚¯(ç”Ÿæˆæ™‚ã¯ç„¡ãƒã‚§ãƒƒã‚¯)ã«ãªã£ã¦ã„ã‚‹ã‚‚ã®ãŒå¤šã„
ã§ã™ãŒã€ãã“ã¯ã‚‚ã¡ã‚ん個別ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®äº‹æƒ…ã§æ±ºã‚ã¦ã‚ˆã„ã§ã—ょã†ã€‚
特ã«ã€å¼•æ•°ã®æ•°ã‚„åž‹ã®ãƒã‚§ãƒƒã‚¯ãªã©ã¯ç”Ÿæˆæ™‚ã«ã™ã‚‹ã®ãŒæœ›ã¾ã—ã„å ´åˆã‚‚
多ã„ã¯ãšã§ã™ã€‚
 ãŸã 〠Enumerator 自体ã¯çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ã§ã¯ãªã〠enumerate ã™ã‚‹
ãŸã‚ã®è£œåŠ©è£…ç½®ã«éŽãŽãªã„ã®ã§ã€æŒ™å‹•ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å®Ÿè¡Œæ™‚ã«æ±ºå®šã•れる
ã®ãŒåŽŸå‰‡ã ã¨ã¯æ€ã£ã¦ã„ã¾ã™ã€‚
e$B9bHx9(<#$G$9!#e(B
On 2008/08/04, at 16:37, Akinori MUSHA wrote:
e$B!!8=:_$N$H$3$m!"F1MM$N%a%=%C%Ie(B(e$BB??te(B)e$B$K4X$7$F!"0z?t%A%’%C%/$*$h$Se(B
$SAFE e$B%A%’%C%/$re(B(Enumerator e$B@8@.$Ne(B)e$BA0$K9T$&$+$I$&$+$OE}0l$5$l$Fe(B
e$B$$$^$;$s!#e(B
e$B!!%a%=%C%IKAF,$X$Ne(B RETURN_ENUMERATOR() e$B$NDI2C$N$_$G:Q$^$;$k$3$H$Ge(B
e$B$?$^$?$^8F=P;~%A%’%C%/e(B(e$B@8@.;~$OL5%A%’%C%/e(B)e$B$K$J$C$F$$$k$b$N$,B?$$e(B
e$B$G$9$,!"$=$3$O$b$A$m$s8DJL$N%a%=%C%I$N;v>p$G7h$a$F$h$$$G$7$g$&!#e(B
e$BFC$K!"0z?t$N?t$d7?$N%A%’%C%/$J$I$O@8@.;~$K$9$k$N$,K>$^$7$$>l9g$be(B
e$BB?$$$O$:$G$9!#e(B
e$B$4@bL@$"$j$,$H$&$4$6$$$^$9!#e(B
e$B>u67$,J,$+$j$^$7$?!#e(B
e$B!!$?$@!"e(B Enumerator e$B<+BN$O>uBV$r;}$D$b$N$G$O$J$/!"e(B enumerate e$B$9$ke(B
e$B$?$a$NJd=uAuCV$K2a$.$J$$$N$G!"5sF0$O%$%F%l!<%?<B9T;~$K7hDj$5$l$ke(B
e$B$N$,86B’$@$H$O;W$C$F$$$^$9!#e(B
e$B>e5-$N86B’$K=>$&$J$i$P!"e(BReadline::HISTORY.each e$B%a%=%C%I$O!"e(B
e$B8=:_$N5sF0$,NI$$$h$&$G$9$M!#;d$O>e5-$N86B’$KG<F@$7$^$7$?!#e(B
e$B$H$$$&$3$H$G!"e(BReadline::HISTORY.each
e$B%a%=%C%I$O=$@5$7$^$;$s!#e(B
e$B$J$*!">e5-$N86B’$Oe(B knu e$B$5$s$N$9M$($J$N$+!"e(B
e$B$=$l$H$be(B ruby (e$B$N3+H/<Te(B?)
e$BA4BN$H$7$F$N$b$N$J$N$+$I$A$i$G$7$g$&$+$M!#e(B
e$B:#8e!"3+H/$r$9$k>e$GCN$C$F$$$$?J}$,$h$$$H;W$C$?$N$G<ALd$7$F$$$^$9!#e(B
At Tue, 5 Aug 2008 21:54:54 +0900,
Takao K. wrote:
 ãŸã 〠Enumerator 自体ã¯çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ã§ã¯ãªã〠enumerate ã™ã‚‹
ãŸã‚ã®è£œåŠ©è£…ç½®ã«éŽãŽãªã„ã®ã§ã€æŒ™å‹•ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å®Ÿè¡Œæ™‚ã«æ±ºå®šã•れる
ã®ãŒåŽŸå‰‡ã ã¨ã¯æ€ã£ã¦ã„ã¾ã™ã€‚
 状態をæŒã¤ã‚‚ã®ã§ãªã„ã¨ã„ã†è¡¨ç¾ã¯æ£ç¢ºã§ã¯ãªã‹ã£ãŸã§ã™ãŒã€è¦ã¯ã€
å…ƒã®ã‚ªãƒ–ジェクトをã‚りã®ã¾ã¾åŒ…ã‚“ã§åˆ—挙ã®è£œåŠ©ã‚’è¡Œã†ã‚‚ã®ã§ã€ä»£å…¥ç‰
ã›ãšã«ãã®å ´ã§ãƒ¡ã‚½ãƒƒãƒ‰ãƒã‚§ãƒ¼ãƒ³ã‚’ç¶šã‘ã¦ä½¿ã†ã‚ˆã†ãªä½¿ã„æ–¹ã‚’ä¸»ã«æƒ³å®š
ã—ã¦ã„ã¾ã™ã€‚
 ãŸã ã€ä¸€æ–¹ã§ã¯ã€Œã€Žåˆ—挙ã ã‘ãŒã§ãる何ã‹ã€ã«æŠ½è±¡åŒ–ã™ã‚‹å…¥ã‚Œç‰©ã€ã¨
ã—ã¦ã®æ€§è³ªãŒã‚ã‚‹ã®ã‚‚確ã‹ã§ã€ãŸã¨ãˆã°ã€Œä½•らã‹ã®åˆ—挙åã‚’å—ã‘å–ã‚‹ã€
メソッド㫠Enumerator を渡ã™ã‚ˆã†ãªã‚±ãƒ¼ã‚¹ãŒæƒ³å®šã•れã¾ã™ã€‚ã—ã‹ã—ã€
ãれをå—ã‘å–ã‚‹å´ã¯ã€(もらã£ãŸã‚‚ã®ãŒ Enumerator ã ã£ãŸã¨ã—ã¦)ãã®
ä¸èº«ãŒä½•ã§ã©ã‚“ãªä¾‹å¤–ãŒèµ·ãå¾—ã‚‹ã®ã‹ã¨ã„ã†ã“ã¨ã¯åˆ†ã‹ã‚‰ãªã„(知ã£ã¦
ã„ã‚‹ã¹ãã§ã‚‚ãªã„)ã®ã§ã€ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‚‚ã®ã¯å—ã‘æ¸¡ã—
ã«ã¯é©ã•ãªã„ã¨æ€ã„ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€å‘¼ã³å‡ºã—å´ãŒè²¬ä»»ã‚’ã‚‚ã£ã¦ä¾‹å¤–ã‚’
æ•æ‰ã™ã‚‹ã®ãªã‚‰æ§‹ã„ã¾ã›ã‚“ãŒã€‚
上記ã®åŽŸå‰‡ã«å¾“ã†ãªã‚‰ã°ã€Readline::HISTORY.each メソッドã¯ã€
ç¾åœ¨ã®æŒ™å‹•ãŒè‰¯ã„よã†ã§ã™ã。ç§ã¯ä¸Šè¨˜ã®åŽŸå‰‡ã«ç´å¾—ã—ã¾ã—ãŸã€‚
ã¨ã„ã†ã“ã¨ã§ã€Readline::HISTORY.each メソッドã¯ä¿®æ£ã—ã¾ã›ã‚“。
ãªãŠã€ä¸Šè¨˜ã®åŽŸå‰‡ã¯ knu ã•ã‚“ã®ãŠè€ƒãˆãªã®ã‹ã€
ãれã¨ã‚‚ ruby (ã®é–‹ç™ºè€…?) 全体ã¨ã—ã¦ã®ã‚‚ã®ãªã®ã‹ã©ã¡ã‚‰ã§ã—ょã†ã‹ã。
今後ã€é–‹ç™ºã‚’ã™ã‚‹ä¸Šã§çŸ¥ã£ã¦ãŠã„ãŸæ–¹ãŒã‚ˆã„ã¨æ€ã£ãŸã®ã§è³ªå•ã—ã¦ã„ã¾ã™ã€‚
 enumerator ã‚’ææ¡ˆã—ã¦æœ€åˆã®å®Ÿè£…を書ã„ãŸç§ã¯ãã†è¦‹ã¦ã„ã¾ã™ãŒã€
開発者全体ã®ã‚‚ã®ã‹ã¨ã„ã†ã¨åˆ†ã‹ã‚Šã¾ã›ã‚“。別ã®ã‚ˆã‚Šä½¿ã„ã‚„ã™ã„æ–¹å‘ãŒ
示ã•れれã°ã€ãã¡ã‚‰ã«ã‚·ãƒ•トã™ã‚Œã°ã„ã„ã¨æ€ã„ã¾ã™ã€‚