作者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/cn.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