Proc
Процедура (proc) — это экземпляр класса Proc, похожий на блок . В отличие от блока, процедура - это объект Ruby, который можно хранить в переменной и, следовательно, многократно использовать в программе.
# Создание
square = Proc.new { |x| x**2 }
# Вызов разными способами
puts square.call(5) # => 25
puts square[5] # => 25
puts square.(5) # => 25
# Передача в метод
def execute_proc(p, val)
p.call(val)
end
puts execute_proc(square, 10) # => 100
- Аргументы: Proc «прощает» лишние или недостающие аргументы (заменяя их на
nil)
square = Proc.new { |x| x**2 }
puts square.call(5, 444444, 445959) # => 25- Возврат (return): Вызов
returnвнутри Proc прерывает выполнение всего вызвавшего его метода.
square = Proc.new do |x|
return x**2
end
def execute_proc(p, val)
p.call(val)
end
puts execute_proc(square, 10) # => unexpected return (LocalJumpError)