有人可以告诉我有没有办法将异常处理作为一种常用方法并在方法中使用它?让我进一步解释一下。
例如,我有以下方法
def add(num1, num2)
begin
num1 + num2
rescue Exception => e
raise e
end
end
def divide(num1, num2)
begin
num1 / num2
rescue Exception => e
raise e
end
end
如您所见,即使我的方法只需要一行,由于异常处理代码,该方法变得更大。
我正在寻找的是更简洁的解决方案(只是一个想法)
def add(num1, num2)
num1 + num2 unless raise_exception
end
def divide(num1, num2)
num1 / num2 unless raise_exception
end
def raise_exception
raise self.Exception
end
请注意上面的代码不起作用,只是我的想法。这可能还是有其他好方法吗?
def handle_exception(&block)
yield
rescue Exception => e
raise e
end
def add(num1, num2)
handle_exception { num1 + num2 }
end
def divide(num1, num2)
handle_exception { num1 / num2 }
end
是的,类似的东西:
def try
yield
rescue Exception => e
puts 'I`m rescued'
end
def devide(num1, num2)
try { num1/num2 }
end
ruby-1.9.2-p180 :013 > devide(5,1)
=> 5
ruby-1.9.2-p180 :014 > devide(5,0)
I`m rescued
=> nil
当然,你可以将一个块传递给一个在begin部分内部产生的方法。
你为什么要救出一个例外并在之后提出它?
您的调用例程必须再次解除您的异常。
你可以这样做:
def divide(num1, num2)
num1 / num2
end
begin
divide(1,0)
rescue Exception => e
puts "Exception '#{e}' occured"
end
您可以在一行中解救Exception:
def divide2(num1, num2)
num1 / num2 rescue Exception
end
p divide2(6,3) # -> 2
p divide2(1,0) # -> Exception
但是你会丢失Exception发生的信息。