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.

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.

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.