Class: Proc

Inherits:
Object show all
Defined in:
eval.c

Overview

Proc objects are blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables.

def gen_times(factor)
  return Proc.new {|n| n*factor }
end

times3 = gen_times(3)
times5 = gen_times(5)

times3.call(12)               #=> 36
times5.call(5)                #=> 25
times3.call(times5.call(4))   #=> 60

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.new {|...| ... } ⇒ Proc .newProc

Creates a new Proc object, bound to the current context. Proc::new may be called without a block only within a method with an attached block, in which case that block is converted to the Proc object.

def proc_from
  Proc.new
end
proc = proc_from { "hello" }
proc.call   #=> "hello"

Overloads:

  • .new {|...| ... } ⇒ Proc

    Yields:

    • (...)

    Returns:

  • .newProc

    Returns:



8726
8727
8728
# File 'eval.c', line 8726

static VALUE
proc_s_new(argc, argv, klass)
int argc;

Instance Method Details

#==(other_proc) ⇒ Boolean

Return true if prc is the same object as other_proc, or if they are both procs with the same body.

Returns:

  • (Boolean)


8982
8983
8984
# File 'eval.c', line 8982

static VALUE
proc_eq(self, other)
VALUE self, other;

#call(params, ...) ⇒ Object #[](params, ...) ⇒ Object

Invokes the block, setting the block’s parameters to the values in params using something close to method calling semantics. Generates a warning if multiple values are passed to a proc that expects just one (previously this silently converted the parameters to an array).

For procs created using Kernel.proc, generates an error if the wrong number of parameters are passed to a proc with multiple parameters. For procs created using Proc.new, extra parameters are silently discarded.

Returns the value of the last expression evaluated in the block. See also Proc#yield.

a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}
a_proc.call(9, 1, 2, 3)   #=> [9, 18, 27]
a_proc[9, 1, 2, 3]        #=> [9, 18, 27]
a_proc = Proc.new {|a,b| a}
a_proc.call(1,2,3)

produces:

prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)
	from prog.rb:4:in `call'
	from prog.rb:5

Overloads:



8905
8906
8907
# File 'eval.c', line 8905

VALUE
rb_proc_call(proc, args)
VALUE proc, args;

#arityFixnum

Returns the number of arguments that would not be ignored. If the block is declared to take no arguments, returns 0. If the block is known to take exactly n arguments, returns n. If the block has optional arguments, return -n-1, where n is the number of mandatory arguments. A proc with no argument declarations is the same a block declaring || as its arguments.

Proc.new {}.arity          #=>  0
Proc.new {||}.arity        #=>  0
Proc.new {|a|}.arity       #=>  1
Proc.new {|a,b|}.arity     #=>  2
Proc.new {|a,b,c|}.arity   #=>  3
Proc.new {|*a|}.arity      #=> -1
Proc.new {|a,*b|}.arity    #=> -2

Returns:



8935
8936
8937
# File 'eval.c', line 8935

static VALUE
proc_arity(proc)
VALUE proc;

#bindingBinding

Returns the binding associated with prc. Note that Kernel#eval accepts either a Proc or a Binding object as its second parameter.

def fred(param)
  proc {}
end

b = fred(99)
eval("param", b.binding)   #=> 99
eval("param", b)           #=> 99

Returns:



9074
9075
9076
# File 'eval.c', line 9074

static VALUE
proc_binding(proc)
VALUE proc;

#call(params, ...) ⇒ Object #[](params, ...) ⇒ Object

Invokes the block, setting the block’s parameters to the values in params using something close to method calling semantics. Generates a warning if multiple values are passed to a proc that expects just one (previously this silently converted the parameters to an array).

For procs created using Kernel.proc, generates an error if the wrong number of parameters are passed to a proc with multiple parameters. For procs created using Proc.new, extra parameters are silently discarded.

Returns the value of the last expression evaluated in the block. See also Proc#yield.

a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}
a_proc.call(9, 1, 2, 3)   #=> [9, 18, 27]
a_proc[9, 1, 2, 3]        #=> [9, 18, 27]
a_proc = Proc.new {|a,b| a}
a_proc.call(1,2,3)

produces:

prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)
	from prog.rb:4:in `call'
	from prog.rb:5

Overloads:



8905
8906
8907
# File 'eval.c', line 8905

VALUE
rb_proc_call(proc, args)
VALUE proc, args;

#cloneObject

MISSING: documentation



8491
8492
8493
# File 'eval.c', line 8491

static VALUE
proc_clone(self)
VALUE self;

#dupObject



8516
8517
8518
# File 'eval.c', line 8516

static VALUE
proc_dup(self)
VALUE self;

#to_procProc

Part of the protocol for converting objects to Proc objects. Instances of class Proc simply return themselves.

Returns:



9050
9051
9052
# File 'eval.c', line 9050

static VALUE
proc_to_self(self)
VALUE self;

#to_sString

Shows the unique identifier for this proc, along with an indication of where the proc was defined.

Returns:



9011
9012
9013
# File 'eval.c', line 9011

static VALUE
proc_to_s(self)
VALUE self;