如何在Ruby中为每个传递一个块和一个初始参数?

时间:2014-07-15 17:54:38

标签: ruby

我为每个HTML元素使用data-tip来显示工具提示是否具有此属性。

由于

data_tip: "a message for you"

看起来比

好多了
:"data-tip" => "an other message for rudi"

无论我对此负责,我都会将'_'转换为' - '。

对于我的simple navigation gem菜单,我找到了一个很好的递归解决方案:

cleanup=Proc.new do |item|
  cleanup_hash item.html_options #<- this does the '_' -> '-'
  item.sub_navigation.items.each(&cleanup) if item.sub_navigation
end
navigation.primary_navigation.items.each(&cleanup)

这很好用,但是,如果我想打印出嵌套级别怎么办?我从哪里开始'0'?

1 个答案:

答案 0 :(得分:4)

您可以使用curry

cleanup=Proc.new do |depth=0, item|
  cleanup_hash item.html_options #<- this does the '_' -> '-'
  item.sub_navigation.items.each(&cleanup.curry[depth + 1]) if item.sub_navigation
end
navigation.primary_navigation.items.each(&cleanup)

咖喱做什么:

  

一个咖喱过程得到一些论点。如果数量足够的话   提供了参数,它将提供的参数传递给   原始proc并返回结果。否则,返回另一个   采取其余论点的咖喱过程。