わたなべです. 何度も何度もすいません. :まつもと ゆきひろです. : i = 0 : ary_pushはチェックの前 : :に統一しようと思うのですが,そもそもわたなべさんの修正の意義 :を良く理解していないので,まずいのかも知れません.が,たぶん, :limitが0の場合と1の場合を特別扱いしたので問題なくなったと思 :うのですが…. ary_push の問題より beg が修正されないのが大元の原因でした. ("a,b,b:c" のような結果になる). だから i = 1 beg はチェックの前 でよさそうです. --- string.c.orig Fri Feb 7 15:16:05 1997 +++ string.c Wed Feb 19 17:03:20 1997 @@ -1629,6 +1629,8 @@ rb_scan_args(argc, argv, "02", &spat, &limit); if (!NIL_P(limit)) { lim = NUM2INT(limit); + if (lim == 0) limit = Qnil; + else if (lim == 1) return ary_new3(1, str); i = 1; } @@ -1680,9 +1682,9 @@ else { if (isspace(*ptr)) { ary_push(result, str_substr(str, beg, end-beg)); - if (!NIL_P(limit) && lim <= ++i) break; skip = 1; beg = end + 1; + if (!NIL_P(limit) && lim <= ++i) break; } else { end++; @@ -1694,8 +1696,8 @@ for (end = beg = 0; ptr<eptr; ptr++) { if (*ptr == char_sep) { ary_push(result, str_substr(str, beg, end-beg)); - if (!NIL_P(limit) && lim <= ++i) break; beg = end + 1; + if (!NIL_P(limit) && lim <= ++i) break; } end++; }