[问题] 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