Ruby 有没有一种惯用的方法来实现条件块;通过;?

Ruby 有没有一种惯用的方法来实现条件块;通过;?,ruby,conditional,block,idioms,Ruby,Conditional,Block,Idioms,在Ruby中,有没有一种干净的方法可以有条件地将块作为参数传递给另一个方法 在我的Rails应用程序中,我使用包装器定义了一些定制的ActionMailer行为,我希望优雅地处理隐式(没有给定块)和显式(给定块)视图模板 class Mailer < ::ActionMailer::Base # ... def signed_mail(opts = {}, &block) # ... mail mail_opts, &(block_given? ?

在Ruby中,有没有一种干净的方法可以有条件地将块作为参数传递给另一个方法

在我的Rails应用程序中,我使用包装器定义了一些定制的ActionMailer行为,我希望优雅地处理隐式(没有给定块)和显式(给定块)视图模板

class Mailer < ::ActionMailer::Base
  # ...
  def signed_mail(opts = {}, &block)
    # ...
    mail mail_opts, &(block_given? ? block : nil)
  end
end
类邮件程序<::ActionMailer::Base
# ...
def签名邮件(opts={},&block)
# ...
邮件选项和(给定块??块:无)
结束
结束

是否有一种更惯用的方法可以选择性地将给定的块传递给
邮件
三元运算符提供了比使用
if
/
else
更简单的代码,但仍然看起来很尴尬。

对于没有传递块的情况,您不必做任何特殊的操作:

class Mailer < ::ActionMailer::Base
  # ...
  def signed_mail(opts = {}, &block)
    # ...
    mail mail_opts, &block
  end
end
类邮件程序<::ActionMailer::Base
# ...
def签名邮件(opts={},&block)
# ...
邮件选择和阻止(&D)
结束
结束

如果没有给出块,
将已经为零,因此这将忠实地传递块的缺失。

当您只调用
邮件选项,块
时会发生什么?甚至当阻塞为零时?As mail方法将查找名为signed_mail的默认模板,对吗?