1

我有一个调用其他两种方法的方法:

def first_method
  second_method

  # Don´t call this method when something went wrong before
  third_method
end

second_method 调用其他方法:

def second_method
  fourth_method
  fifth_method
end

假设 Fifth_method 有一个 begin/rescue 语句:

def fifth_method
  begin
    # do_something
  rescue Error => e
    # 
  end
end

现在我想避免在 Fifth_method 抛出错误时调用 third_method。我/你将如何在 Ruby 中最优雅地解决这个问题。

4

3 回答 3

3

在我看来这很明显,但无论如何

def first_method
  begin 
    second_method
  rescue
    return
  end
  third_method
end

这种构造(没有明确的异常类型)将捕获StandartError异常。

为避免与其他异常相交,您可以创建自己的异常类:

class MyError < StandardError; end

然后使用它

begin 
  second_method
rescue MyError => e
  return
end

请注意,您不应继承异常,Exception因为这种类型的异常来自环境级别,其中的异常StandardError旨在处理应用程序级别的错误。

于 2012-08-17T08:52:00.983 回答
1

如果你不想使用异常,你可以只返回一个状态:

def fifth_method
  # do_something
  true
rescue Error => e
  false
end

def first_method
  if second_method
    third_method
  end
end
于 2012-08-17T09:22:02.433 回答
1

我认为最简单的方法是从 Fifth_method 中删除错误捕获并将其移至 first_method

def first_method
  begin 
     second_method

     third_method
  rescue Error => e

  end
end


def fifth_method
   # do_something

end
于 2012-08-17T08:39:31.003 回答