[問題] Programming Ruby 裡的 lambda 範例

看板Ruby作者 (接米)時間10年前 (2014/06/26 16:36), 10年前編輯推噓0(006)
留言6則, 1人參與, 最新討論串1/1
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://www.ptt.cc/bbs/Ruby/M.1403771762.A.062.html

06/26 20:43, , 1F
掛&的參數必須放最後(*則是倒數第二)
06/26 20:43, 1F

06/26 20:44, , 2F
這參數代表後方會掛一個block傳進來
06/26 20:44, 2F

06/26 20:44, , 3F
(也可以不用&參數 而在中間用yield)
06/26 20:44, 3F

06/26 20:44, , 4F
簡單來說大概像 loop do ... end
06/26 20:44, 4F

06/26 20:45, , 5F
其實這也是個內建的一個用了&參數的方法
06/26 20:45, 5F

06/26 20:58, , 6F
對了 這用法Ruby中蠻常出現的
06/26 20:58, 6F
謝謝。 ※ 編輯: hcmlinj (211.76.246.40), 06/27/2014 09:10:08
文章代碼(AID): #1Jgzjo1Y (Ruby)
文章代碼(AID): #1Jgzjo1Y (Ruby)