Class: Enumerator::Yielder

Inherits:
Object show all
Defined in:
enumerator.c

Instance Method Summary collapse

Constructor Details

#initializeObject

:nodoc:



1333
1334
1335
1336
1337
1338
1339
# File 'enumerator.c', line 1333

static VALUE
yielder_initialize(VALUE obj)
{
    rb_need_block();

    return yielder_init(obj, rb_block_proc());
}

Instance Method Details

#<<(arg) ⇒ Object

:nodoc:



1351
1352
1353
1354
1355
1356
1357
1358
1359
# File 'enumerator.c', line 1351

static VALUE
yielder_yield_push(VALUE obj, VALUE arg)
{
    struct yielder *ptr = yielder_ptr(obj);

    rb_proc_call_with_block(ptr->proc, 1, &arg, Qnil);

    return obj;
}

#to_procObject

Returns a Proc object that takes an argument and yields it.

This method is implemented so that a Yielder object can be directly passed to another method as a block argument.

enum = Enumerator.new { |y|
  Dir.glob("*.rb") { |file|
    File.open(file) { |f| f.each_line(&y) }
  }
}


1373
1374
1375
1376
1377
1378
1379
# File 'enumerator.c', line 1373

static VALUE
yielder_to_proc(VALUE obj)
{
    VALUE method = rb_obj_method(obj, sym_yield);

    return rb_funcall(method, idTo_proc, 0);
}

#yield(args) ⇒ Object

:nodoc:



1342
1343
1344
1345
1346
1347
1348
# File 'enumerator.c', line 1342

static VALUE
yielder_yield(VALUE obj, VALUE args)
{
    struct yielder *ptr = yielder_ptr(obj);

    return rb_proc_call_kw(ptr->proc, args, RB_PASS_CALLED_KEYWORDS);
}