Ruby/Справочник/Proc: различия между версиями
Содержимое удалено Содержимое добавлено
Новая: ==Класс Proc== <tt>Proc</tt> 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 t... |
Нет описания правки |
||
Строка 1:
==Класс Proc==
Объекты <tt>Proc</tt> являются блоками кода, которые связаны с локальными переменными. Блок кода может быть выполнен в другом контексте.
<code>def gen_times(factor)
return Proc.new {|n| n*factor }
Строка 25:
Proc.new => </tt><tt>a_proc </tt>
----
Создает новый объект класса <tt>Proc</tt> и запоминает в нем текущий контекст. <tt>Proc::new</tt> может быть вызван без блока только в пределах метода к которому прицеплен блок (во время вызова). В этом случае блок будет преобразован в объект класса <tt>Proc</tt>.
<code>def proc_from
Proc.new
Строка 33:
===Proc#=====
----
<tt>prc == other_proc => true
----
===Proc#[]===
----
Строка 41:
prc[params,...] => obj</tt>
----
Выполняет блок, присваивая параметрам блока значения <i>params</i> и остальных переменных, обозначенных троеточием. Выдает предупреждение, если блок ожидает лишь одно значение, а ему передается больше (тем не менее, он преобразует список параметров в массив и попытается выполнить блок).
Для блоков, создаваемых с использованием <tt>Kernel.proc</tt>, генерируется ошибка если число параметров передаваемых в блок превышает число параметров объявленных во время его создания. Для блоков, созданных при помощи <tt>Proc.new</tt>, дополнительные параметры просто отбрасываются.
Возвращает значение последнего вычисленного выражения в блоке. Смотри еще <tt>Proc#yield</tt>.
<code>a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}
a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
Строка 49:
a_proc = Proc.new {|a,b| a}
a_proc.call(1,2,3)</code>
<i>
<code>prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)
from prog.rb:4:in `call'
from prog.rb:5</code>
(еще известен как call)===Proc#arity===
----
<tt>prc.arity
----
Возвращает количество аргументов, которые могут быть восприняты блоком. Если блок объявлен без указания аргументов, то возвращает 0. Если число агрументов точно равно n, то возвращает n. Если блок имеет оциональный аргумент, то возвращает -n-1, где n --- количество обязательных аргументов. Блок <tt>proc</tt> без аргументов обычно содержит <tt>||</tt> вместо аргументов.
<code>Proc.new {}.arity #=> 0
Proc.new {||}.arity #=> 0
Строка 69 ⟶ 70 :
<tt>prc.binding => binding</tt>
----
<code>def fred(param)
proc {}
Строка 82 ⟶ 83 :
prc[params,...] => obj</tt>
----
Выполняет блок, присваивая параметрам блока значения <i>params</i> и остальных переменных, обозначенных троеточием. Выдает предупреждение, если блок ожидает лишь одно значение, а ему передается больше (тем не менее, он преобразует список параметров в массив и попытается выполнить блок).
Для блоков, создаваемых с использованием <tt>Kernel.proc</tt>, генерируется ошибка если число параметров передаваемых в блок превышает число параметров объявленных во время его создания. Для блоков, созданных при помощи <tt>Proc.new</tt>, дополнительные параметры просто отбрасываются.
Возвращает значение последнего вычисленного выражения в блоке. Смотри еще <tt>Proc#yield</tt>.
<code>a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}
a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
Строка 94 ⟶ 95 :
from prog.rb:4:in `call'
from prog.rb:5</code>
(еще известен как [])===Proc#clone===
----
<tt>prc.clone
----
Создает копию блока <tt>prc</tt>.
===Proc#dup===
----
<tt>prc.dup
----
Создает копию блока <tt>prc</tt>.
===Proc#to_proc===
----
<tt>prc.to_proc
----
Часть сооглашения о преобразованиии других объектов в объекты класса <tt>Proc</tt>. Внутри класса <tt>Proc</tt> он просто возвращает сам себя.
===Proc#to_s===
----
<tt>prc.to_s => string</tt>
----
Возвращает строку с уникальным идентификатором для <tt>prc</tt>, вместе с указателем на место, где блок был объявлен.
|