0
私は、次のラムダを使用していますが、Resque::Mailer
のREADME
(https://github.com/zapnap/resque_mailer)から収集:Use a guard clause instead of wrapping the code inside a conditional expression
:このラムダをガード句でどのように書き直すことができますか?
Resque::Mailer.error_handler = lambda { |mailer, _message, error, action, args| # Necessary to re-enqueue jobs that receive the SIGTERM signal if error.is_a?(Resque::TermException) Resque.enqueue(mailer, action, *args) else raise error end }
を、コードベースで有効になってrubocop
は、エラーで、この方法のif..else
性質について不平を言います。
ここでunless
を設定しようとしましたが、これまで設定した順序に関係なくraise error
が実行されました。ここでガード句を使用する正しい方法は何ですか?
私がこれを尋ねる理由は、次の例は、私がunless
で明白なことを行うと、エラーが常に発生することを示しているようです。私はこれを間違って理解していますかunless
に状態を変換
Development [10] (main)> class Foo Development [10] (main)* def bar Development [10] (main)* puts "Outside unless getting exec" unless 1 == 2 Development [10] (main)* puts "After unless getting exec" Development [10] (main)* end Development [10] (main)* end :bar Development [11] (main)> Foo.new.bar Outside unless getting exec After unless getting exec nil
Iは実際に見えたその一部[例えば、コード(http://pastebin.com/aG7Hxd8f)を実行しようとしましたこれを行うと、エラーが常に発生することを示します。明確にできますか? –
これは完全に正しいわけではありません。エラーは 'Resque :: TermException'の場合にのみ発生します。 – eugen
さて、私の質問も更新されました。なぜ 'puts'が違う振る舞いをするのか説明できますか? –