是否可以这样称呼:
def foo(param1)
hash.select { |k,v| yield }.each do |x|
res += do_something_with(v,param1)
end
res
end
来自 ERB 模板,例如:
<%= foo('A',{ v.field!='X' }) %>
在我的哈希上实现自定义选择?
在 ruby 中,如果在参数名称前添加前导,则可以将传递的块作为最后一个参数&
,例如&block
,该block
变量将被Proc
传递给方法。
block
如果没有通过任何块,则为 nil。
要转发块,请调用方法并添加为最后一个参数&block
所以现在,让我们处理你的问题:
在方法的最后一个参数处获取块并将其传递给select
方法:
def foo(param1, &block)
hash.select(&block).each do |x|
res += do_something_with(v,param1)
end
res
end
你也可以做类似的事情,.select { |v| yield(v) }
但这不那么优雅:)
您的观点有一个小问题,这里是更正的版本:
<%= foo('A') { |v| v.field!='X' } %>
您可以通过在块前面加上 and 来将块作为参数&
:
def foo(¶m1)
然后你可以block_given?
测试:
if block_given?
#do something with param1
如果您的方法 foo 所做的事情主要与演示相关,并且您需要从视图中访问它,那么拥有它的最佳位置可能是 Helper。Helpers 中声明的所有方法都可以在 erb 模板中使用。
您可以使用 & 合成器将块从一个方法传递到另一个方法:
def foo(values,&action)
#pass &action to whatever method need it.
end