[問題] Programming Ruby 裡的 lambda 範例

作者: hcmlinj (接米)   2014-06-26 16:35:59
Programming Ruby 裡有一個 lambda 的範例是這樣子:
def my_while(cond, &body)
while cond.call
body.call
end
end
i = 0
my_while -> { i < 3 } do
puts i
i += 1
end
可以理解 my_while 需要2個參數
cond:-> { i < 3 }
&body:do ... end
my_while -> { i < 3 }, do # 這樣無法執行?
自己改了一個 my_while2 是比較能理解且可執行的:
def my_while2(cond, body)
while cond.call
body.call
end
end
j = 0
my_while2 -> { j < 3 }, -> { puts j; j += 1 }
想請教 lambda 和 block 間為什麼不需要逗號作為分隔?
是不是有什麼地方小弟漏掉了沒有理解到呢?
當然這一頁上面一點的地方有一個關於 -> 的範例:
proc1 = -> arg { puts "In proc1 with #{arg}" }
不知道是否跟這有關?
以上,謝謝。
作者: danny8376 (釣到一隻猴子@_@)   2014-06-26 20:43:00
掛&的參數必須放最後(*則是倒數第二)這參數代表後方會掛一個block傳進來(也可以不用&參數 而在中間用yield)簡單來說大概像 loop do ... end其實這也是個內建的一個用了&參數的方法對了 這用法Ruby中蠻常出現的

Links booklink

Contact Us: admin [ a t ] ucptt.com