block可以用{}(優先順位),
或do ...end(順位較後)的表現方式,
大多如寄生蟲般依附在其它的方法或物件後。
是一個程式碼區塊,
不是物件無法單獨存在,
會造成語法錯誤。
{ puts "Hello, Ruby" } # 語法錯誤
和前面講過的hash不同,
雖然都使用大括號,
但block不是參數。
def say_hello_to(name)
puts "hi #{name}"
end
say_hello_to("小花") {
puts "有執行此Block就能看到這句話"
}
#只印出 hi 小花
此例子name "小花"才是參數,
block不會主動執行。
我們想讓block被執行,
可以搭配yield方法,
控制權將暫時交給block,
等block執行完後再把控制權交回來。
def say_hello_to(name)
yield
puts "hi #{name}"
end
say_hello_to("小花") {
puts "有執行此Block就能看到這句話"
}
#印出:
有執行此Block就能看到這句話
hi 小花
Ruby
block
yield