在Ruby中,我可以将可变数量的lambda传递给方法吗?

时间:2014-12-15 12:04:12

标签: ruby variables lambda arguments

我有以下代码:

update_using(&add_tabs_before_every_description_line, &add_tabs_before_every_photo_description_line, &add_links_to_photo_descriptions)

其中三个参数是声明如下的lambda表达式:

add_tabs_before_every_description_line = lambda do |mutable_viewable_gallery|
  mutable_viewable_gallery.description = add_tabs_before_every_line(mutable_viewable_gallery.description, 2)
  return mutable_viewable_gallery
end

它无法工作,我无法将可变数量的lambdas传递给update_using,其声明如下:

def update_using(*args)

我得到的错误正是关于传递多个lambda。它只需要一个然后是一个结束括号,而不是一个逗号。一旦我删除&符号,语法错误就会消失,但是然后update_using它不会将它视为lambda。

  

generate_gallery.rb:50:语法错误,意外',',期待')'   ..._ before_every_description_line,& add_tabs_before_every_photo ...   ......

我希望能够将可变数量的lambdas传递给update_using。我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用&运算符,将lambda(或其他可以转换为proc的proc或对象)作为块传递给方法。现在,你不能在块参数之后传递任何参数(所以你也不能将多个块传递给方法)。我想你应该将你的lambdas作为'常规'参数传递,而不是&

update_using(add_tabs_before_every_description_line, add_tabs_before_every_photo_description_line, add_links_to_photo_descriptions)