豊福です。

  take と drop という言葉につられてついコードを見てしまった。

In message "Re: [ruby-dev:34067] Array#take,take_while,drop,drop_whlie"
    on Sun, 16 Mar 2008 14:53:41 +0900, "Yusuke ENDOH" <mame / tsg.ne.jp> writes:
> +rb_ary_take(VALUE obj, VALUE n)
> +{
> +    return rb_ary_subseq(obj, 0, FIX2LONG(n));
> +}
 ... 
> +rb_ary_take_while(VALUE ary)
> +{
 ...
> +    result = rb_ary_new2(RARRAY_LEN(ary));
> +    for (i = 0; i < RARRAY_LEN(ary); i++) {
> +	if (!RTEST(rb_yield(RARRAY_PTR(ary)[i]))) break;
> +	rb_ary_push(result, rb_ary_elt(ary, i));
> +    }

  rb_ary_take_while が rb_ary_take のように rb_ary_subseq を
使っていないのはどうしてなんですか?

  ところで enum.c の enum_drop は

-    args[0] = rb_ary_new2(args[1]);
+    args[0] = rb_ary_new();

ですか。
---