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 方法或者 [] 运算符。