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