Ruby/Справочник/Proc: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 86:
===Proc#call===
----
<ttsource lang=ruby>prc.call(params,...) #=&gt;> obj
prc[params,...] #=&gt;> obj</ttsource>
----
Выполняет блок, присваивая параметрам блока значения <i>params</i> и остальных переменных, обозначенных троеточием. Выдает предупреждение, если блок ожидает лишь одно значение, а ему передается больше (тем не менее, он преобразует список параметров в массив и попытается выполнить блок).
Для блоков, создаваемых с использованием <tt>Kernel.proc</tt>, генерируется ошибка если число параметров передаваемых в блок превышает число параметров объявленных во время его создания. Для блоков, созданных при помощи <tt>Proc.new</tt>, дополнительные параметры просто отбрасываются.
Возвращает значение последнего вычисленного выражения в блоке. Смотри еще <tt>Proc#yield</tt>.
<source <codelang=ruby>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)</codesource>
<i>produces:</i>
<source <codelang=ruby>prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)
from prog.rb:4:in `call'
from prog.rb:5</codesource>
 
(еще известен как [])