區塊是 Ruby 獨特且強大的特性,配合 yield 實現回呼模式。本文說明區塊語法、yield 參數傳遞、區塊與方法關聯、&參數 显式轉換、以及 BEGIN/END 區塊。
區塊名 { 陳述式1; 陳述式2; ... }
# 或
區塊名 do
陳述式1
陳述式2
end
#!/usr/bin/ruby
def test
puts "在方法中"
yield
puts "回到方法"
yield
end
test { puts "在區塊中" }
# 輸出:
# 在方法中
# 在區塊中
# 回到方法
# 在區塊中
#!/usr/bin/ruby
def test
yield 5
puts "在方法 test 中"
yield 100
end
test { |i| puts "在區塊中 #{i}" }
# 輸出:
# 在區塊中 5
# 在方法 test 中
# 在區塊中 100
多參數:yield a, b → 區塊 { |a, b| ... }。
同名方法以 yield 呼叫區塊:
def test
yield
end
test { puts "Hello world" }
最後一個參數前加 &,區塊轉為 Proc 物件:
def test(&block)
block.call
end
test { puts "Hello World!" }
# 輸出:Hello World!
檔案層級的掛鉤:
BEGIN:檔案載入時執行,按遇到順序END:程式結束前執行,按相反順序#!/usr/bin/ruby
BEGIN { puts "BEGIN 區塊" }
END { puts "END 區塊" }
puts "MAIN 區塊"
# 輸出:
# BEGIN 區塊
# MAIN 區塊
# END 區塊