Add POSTARG support to rb_scan_args()

 rb_scan_args()をPOSTARG対応にするパッチです。

rb_scan_args(argc, argv, "11*2", &first, &optional, &array, &penult, 

&last);

のように、 * の後に数字を指定できます。

 ドキュメントもおおざっぱなまま放置されているので更新してみました。

2009/2/13 Akinori MUSHA [email protected]:

e$B!!e(Brb_scan_args()e$B$re(BPOSTARGe$BBP1~$K$9$k%Q%C%A$G$9!#e(B

rb_scan_args(argc, argv, “11*2”, &first, &optional, &array, &penult, &last);

e$B$N$h$&$K!"e(B * e$B$N8e$K?t;z$r;XDj$G$-$^$9!#e(B

e$B%I%-%e%a%s%H$b$$$6$C$Q$J$^$^J|CV$5$l$F$$$k$N$G99?7$7$F$_$^$7$?!#e(B

e$B$“!”:G8e$Ne(B rb_raise()
e$B$N%a%C%;!<%8$N$*?,$O%G%P%C%0%3!<%I$J$N$GL5;k$7$F$/$@$5$$!#e(B

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

In message “Re: [ruby-dev:37995] Add POSTARG support to rb_scan_args()”
on Fri, 13 Feb 2009 20:01:53 +0900, Akinori MUSHA
[email protected] writes:

|e$B!!e(Brb_scan_args()e$B$re(BPOSTARGe$BBP1~$K$9$k%Q%C%A$G$9!#e(B
|
| rb_scan_args(argc, argv, “11*2”, &first, &optional, &array, &penult, &last);
|
|e$B$N$h$&$K!"e(B * e$B$N8e$K?t;z$r;XDj$G$-$^$9!#e(B

e$B%3%_%C%H$7$F$/$@$5$$!#e(B

|e$B!!%I%-%e%a%s%H$b$$$6$C$Q$J$^$^J|CV$5$l$F$$$k$N$G99?7$7$F$_$^$7$?!#e(B

e$B$3$A$i$O$b$&$7$F$$$?$@$$$?$h$&$G$9$M!#$"$j$,$H$&$4$6$$$^$9!#e(B

Method#parameterse$B$,@5$7$$7k2L$rJV$;$k$h$&$Ke(Brb_define_method
e$B$Ge(B scan_args e$BAjEv$r;XDj$G$-$k$h$&$K$7$?$$$N$@$,e(B…e$B!#e(B

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

In message “Re: [ruby-dev:38026] Re: Add POSTARG support to
rb_scan_args()”
on Mon, 16 Feb 2009 17:35:48 +0900, “Akinori MUSHA”
[email protected] writes:

|> Method#parameterse$B$,@5$7$$7k2L$rJV$;$k$h$&$Ke(Brb_define_method
|> e$B$Ge(B scan_args e$BAjEv$r;XDj$G$-$k$h$&$K$7$?$$$N$@$,e(B…e$B!#e(B
|
|rb_scan_arg() e$BAjEv$r%a%=%C%IDj5A!&8F=P5!9=$KAH$F~$l$F$7$^$&$Y$-e(B
|e$B$J$s$G$9$+$M!#$7$P$79M$($F$
$^$7$?$,!“$K$o$+$K$O%V%m%C%/$N2>0z?te(B
|e$B%j%9%H$d>-Mh$N%-!<%o!<%I0z?t$NI=8=J}K!$K$D$$$F%”%$%G%"$,$^$H$^$je(B
|e$B$^$;$s$G$7$?!#e(B

aritye$B$de(Bparameterse$B$,$h$j@5$7$$>pJs$rJV$9$?$a$K$OAH$_F~$l$F$7e(B
e$B$^$C$?J}$,$“$j$,$?$$$G$9$M!#$”$s$^$j?<$/9M$($F$$$J$$$s$G$9$,!"e(B
e$B$?$H$($Pe(Brb_define_methode$B$N:G8e$N0z?t$KJ8;zNs$rEO$9$He(B
scan_argse$BAjEv$K$J$k$h$&$J@_7W$O2DG=$G$O$J$$$+$H;W$$$^$9!#e(B

At Mon, 16 Feb 2009 15:32:30 +0900,
matz wrote:

In message “Re: [ruby-dev:37995] Add POSTARG support to rb_scan_args()”
on Fri, 13 Feb 2009 20:01:53 +0900, Akinori MUSHA [email protected] writes:

| rb_scan_args()をPOSTARG対応にするパッチです。
|
| rb_scan_args(argc, argv, “11*2”, &first, &optional, &array, &penult, &last);
|
|のように、 * の後に数字を指定できます。

コミットしてください。

入れました。

| ドキュメントもおおざっぱなまま放置されているので更新してみました。

こちらはもうしていただいたようですね。ありがとうございます。

はい、ドキュメントの改善のみ先に入れていました。

Method#parametersが正しい結果を返せるようにrb_define_method
で scan_args 相当を指定できるようにしたいのだが…。

rb_scan_arg() 相当をメソッド定義・呼出機構に組み入れてしまうべき
なんですかね。しばし考えてみましたが、にわかにはブロックの仮引数
リストや将来のキーワード引数の表現方法についてアイデアがまとまり
ませんでした。