是否有一种干净的方法可以有条件地将块作为参数传递给Ruby中的另一个方法?
在我的Rails应用程序中,我使用包装器定义了一些自定义的ActionMailer行为,我希望优雅地处理隐式(没有给定块)和显式(给定块)视图模板。
class Mailer < ::ActionMailer::Base
# ...
def signed_mail(opts = {}, &block)
# ...
mail mail_opts, &(block_given? ? block : nil)
end
end
是否有一种更为惯用的方法可选将给定的块传递给mail
?三元运算符提供DRYer代码而不是使用{{1} } / if
,但看起来仍然很尴尬。
答案 0 :(得分:2)
对于没有传递阻止的情况,你不必做任何特别的事情:
class Mailer < ::ActionMailer::Base
# ...
def signed_mail(opts = {}, &block)
# ...
mail mail_opts, &block
end
end
如果没有给出阻止,block
已经是零,所以这将忠实地传递缺乏障碍。