Rails - Rubocop - 开始 + 救援语法

Rails - Rubocop - Begin + Rescue syntax

我有以下代码:

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

通过简要阅读一些博客,我应该像上面那样使用 begin rescue 和 end 来处理错误,但是我收到了多余的 'begin' rubocop 警告。

begin 仅在指定一段可能导致较大块内错误的代码时使用吗?因此这里是多余的吗?

提前致谢

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

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

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

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

方法体、块体和lambda体是隐式异常块。您不需要将方法主体、块主体或 lambda 主体的 完整代码 包装在 begin / rescue / else 中/ ensure / end 异常块,因为它已经是隐含的一个。所以,每当你有类似

def foo
  begin
  rescue
  end
end

foo do
  begin
  rescue
  end
end

-> do
  begin
  rescue
  end
end

你可以用

替换它
def foo
rescue
end

或块和 lambda 的等效项。