昨天有講到,
block不是物件,
無法單獨存在,
也無法主動執行。
有一些方法可以使block物件化:
使用 Proc 類別把 Block 物件化
say_hello_to = Proc.new { |name| puts "hi #{name}"}
呼叫Proc 方式
say_hello_to.call("小花") # .call
say_hello_to.("小花") # .小括號
say_hello_to["小花"] # 中括號
say_hello_to === "小花" # 三個等號
say_hello_to.yield "小花" # .yield
Proc 類別下,還有一個lambda可以把 Block 物件化,
但又有些許不同。
say_hello_to = lambda { |name| puts "hi #{name}"}
或是
say_hello_to = ->(name) { puts "hi #{name}"}
這兩種方式都可以把 Block 物件化,
呼叫方式和Proc 相同,
不過執行上會有些許不同,
明天我們再來詳細比較吧!
Ruby
Proc
lambda