相关疑难解决方法(0)

Ruby的Enumerable#zip是否在内部创建数组?

Ruby中 -有人说,优雅地比较两个枚举器

zip的问题在于它在内部创建数组,无论你通过什么Enumerable.输入参数的长度还有另一个问题

我看了一下YARV中Enumerable#zip的实现,并看到了

static VALUE
enum_zip(int argc, VALUE *argv, VALUE obj)
{
    int i;
    ID conv;
    NODE *memo;
    VALUE result = Qnil;
    VALUE args = rb_ary_new4(argc, argv);
    int allary = TRUE;

    argv = RARRAY_PTR(args);
    for (i=0; i<argc; i++) {
        VALUE ary = rb_check_array_type(argv[i]);
        if (NIL_P(ary)) {
            allary = FALSE;
            break;
        }
        argv[i] = ary;
    }
    if (!allary) {
        CONST_ID(conv, "to_enum");
        for (i=0; i<argc; i++) {
            argv[i] = rb_funcall(argv[i], conv, 1, ID2SYM(id_each));
        }
    }
    if (!rb_block_given_p()) { …
Run Code Online (Sandbox Code Playgroud)

c ruby yarv array-merge

8
推荐指数
1
解决办法
432
查看次数

Ruby中Enumerator类的目的是什么?

如果我像这样创建一个Enumertor:

enum = [1,2,3].each => #<Enumerator: [1, 2, 3]:each> 
Run Code Online (Sandbox Code Playgroud)

enum是一名调查员.这个对象的目的是什么?我不能这样说:

enum { |i| puts i }
Run Code Online (Sandbox Code Playgroud)

但我可以这样说:

enum.each { |i| puts i }
Run Code Online (Sandbox Code Playgroud)

这似乎是多余的,因为Enumerator是用.each.创建的.它似乎存储了一些有关该each方法的数据.

我不明白这里发生了什么.我确信我们有这个Enumerator类有一些合乎逻辑的原因,但是它能做什么,Array不能呢?我想也许它是Array和其他Enumerables的祖先,但它似乎不是.究竟是什么原因导致存在Enumerator类,以及它将在何种上下文中使用?

ruby enumerator

6
推荐指数
1
解决办法
1794
查看次数

标签 统计

ruby ×2

array-merge ×1

c ×1

enumerator ×1

yarv ×1