ruby – 麻烦在块/ lambda内产生
发布时间:2020-12-16 19:23:58 所属栏目:百科 来源:网络整理
导读:我有以下 Ruby代码: # func1 generates a sequence of items derived from x# func2 does something with the items generated by func1def test(x,func1,func2) func1.call(x) do | y | func2.call(y) endendfunc1 = lambda do | x | for i in 1 .. 5 yiel
我有以下
Ruby代码:
# func1 generates a sequence of items derived from x # func2 does something with the items generated by func1 def test(x,func1,func2) func1.call(x) do | y | func2.call(y) end end func1 = lambda do | x | for i in 1 .. 5 yield x * i end end func2 = lambda do | y | puts y end test(2,func2) # Should print '2','4','6','8',and '10' 当然,这不起作用. test.rb:11: no block given (LocalJumpError) from test.rb:10:in `each' from test.rb:10 from test.rb:4:in `call' from test.rb:4:in `test' from test.rb:20 解决方法
Lambdas不会像常规方法那样隐式接受块,所以你的func1不能产生.改为:
func1 = lambda do |x,&blk| for i in 1 .. 5 blk.call(x * i) end end 具体来说,我认为这是因为yield会将控制权发送回调用者的块,这不包括lambda调用.所以下面的代码就像你“期待”一样: def foo (lambda { |n| yield(n) }).call(5) end foo { |f| puts f } # prints 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |