PROC

def call_the_block(&calling); calling.call; end

its_a = proc do |*args|
  puts "It's a..." unless args.empty?
  "beautiful day"
end

puts its_a       #=> "beautiful day"
puts its_a.call  #=> "beautiful day"
puts its_a[1, 2] #=> "It's a..." "beautiful day"

我們從最後一個例子中複製了方法 call_the_block。在這裡,你可以看到通過使用塊呼叫 proc 方法來進行 proc。你還可以看到塊(如方法)具有隱式返回,這意味著 proc(和 lambdas)也會執行。在 its_a 的定義中,你可以看到塊可以採用 splat 引數和普通引數; 他們也能夠採用預設引數,但我想不出一種方法可以解決這個問題。最後,你可以看到可以使用多種語法來呼叫方法 - call 方法或者 [] 運算子。