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