【问题标题】:How can this lambda be rewritten with a guard clause?如何用保护子句重写这个 lambda?
【发布时间】:2017-02-16 18:00:41
【问题描述】:
我正在使用以下 lambda,从 README 的 Resque::Mailer (https://github.com/zapnap/resque_mailer) 收集:
Resque::Mailer.error_handler = lambda { |mailer, _message, error, action, args|
# 需要重新排队接收到 SIGTERM 信号的作业
if error.is_a?(Resque::TermException)
Resque.enqueue(mailer, action, *args)
别的
引发错误
结尾
}
不幸的是,在代码库上启用了rubocop,抱怨该方法的if..else 性质,并出现错误:Use a guard clause instead of wrapping the code inside a conditional expression。
我尝试在这里设置unless,但到目前为止,无论我设置哪个顺序,raise error 都会被执行。在这里使用保护子句的正确方法是什么?
也就是说,我问这个的原因是,下面的例子似乎表明,如果我用unless 做明显的事情,总是会引发错误。我理解错了吗?
开发[10](主)>类Foo
发展 [10] (main)* def bar
开发 [10] (main)* 将“除非获得 exec 否则放在外部”,除非 1 == 2
开发 [10] (main)* 提出“除非获得 exec”
发展[10](主要)*结束
发展[10](主要)*结束
:酒吧
开发[11](主)> Foo.new.bar
除非得到执行,否则在外面
除非得到 exec
零
【问题讨论】:
标签:
ruby-on-rails
ruby