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
  1. Аргументы: Proc «прощает» лишние или недостающие аргументы (заменяя их на nil)
square = Proc.new { |x| x**2 }

puts square.call(5, 444444, 445959) # => 25
  1. Возврат (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)