如果block_given,只给出方法块和产量?

时间:2015-03-20 20:29:48

标签: ruby-on-rails ruby

假设我有一个基本的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 行不起作用,从那时起我已经为下一个函数提供了一个块来处理。

1 个答案:

答案 0 :(得分:3)

接受块作为参数并将其传递出去。无需使用block_given?

这在功能上与您的代码完全相同:

def td_tag(*args, &block)
  content_tag(:td, *args, &block)
end

它完全安全;如果你不给方法一个阻止,block将是nilblock_given?内的content_tag将是假的。