作者hcmlinj (接米)
看板Ruby
標題[問題] Programming Ruby 裡的 lambda 範例
時間Thu Jun 26 16:35:59 2014
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}" }
不知道是否跟這有關?
以上,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.76.246.40
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Ruby/M.1403771762.A.062.html
1F:→ danny8376:掛&的參數必須放最後(*則是倒數第二) 06/26 20:43
2F:→ danny8376:這參數代表後方會掛一個block傳進來 06/26 20:44
3F:→ danny8376:(也可以不用&參數 而在中間用yield) 06/26 20:44
4F:→ danny8376:簡單來說大概像 loop do ... end 06/26 20:44
5F:→ danny8376:其實這也是個內建的一個用了&參數的方法 06/26 20:45
6F:→ danny8376:對了 這用法Ruby中蠻常出現的 06/26 20:58
謝謝。
※ 編輯: hcmlinj (211.76.246.40), 06/27/2014 09:10:08