Rails-Rubocop-开始+救援语法

时间:2019-01-11 09:30:41

标签: ruby-on-rails ruby rubocop

我有以下代码:

  def payload
    begin
      @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
    rescue JWT::ExpiredSignature => e
      Rollbar.warning(e)
    end
  end

通过简短地阅读一些博客,我应该像上面一样使用begin begin和end处理错误,但是我收到了多余的“开始” rubocop警告。

仅在指定可能在较大块中导致错误的代码位时才开始使用?因此,这里是否多余?

预先感谢

编辑:如果我不需要它,它是否写为

  def payload
    @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
  rescue JWT::ExpiredSignature => e
    Rollbar.warning(e)
  end

2 个答案:

答案 0 :(得分:2)

在开始是您方法中的第一件事时执行此操作

def payload
  @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
rescue JWT::ExpiredSignature => e
  Rollbar.warning(e)
end

答案 1 :(得分:1)

方法主体,块主体和lambda主体是隐式异常块。您无需将方法主体,块主体或lambda主体的整个代码包装在begin / rescue / else / {{ 1}} / ensure异常块,因为它已经是隐式的。因此,只要您有

end

def foo
  begin
  rescue
  end
end

foo do
  begin
  rescue
  end
end

您可以仅用

替换它
-> do
  begin
  rescue
  end
end

或等效的块和lambda。