假设我有一个基本的td_tag帮助器,它包含了application_helper.rb中的content_tag方法
def td_tag(*args)
if block_given?
content_tag(:td, *args) do
yield
end
else
content_tag(:td ,*args)
end
end
使这段代码更短的红宝石方法是什么?
这个例子在某种程度上是有效的,但是使用相同的参数调用相同的函数似乎没有必要,只是有或没有块?
通过将 block_given?附加到块内的 yield 行不起作用,从那时起我已经为下一个函数提供了一个块来处理。
答案 0 :(得分:3)
接受块作为参数并将其传递出去。无需使用block_given?
。
这在功能上与您的代码完全相同:
def td_tag(*args, &block)
content_tag(:td, *args, &block)
end
它完全安全;如果你不给方法一个阻止,block
将是nil
而block_given?
内的content_tag
将是假的。