是否有一种方法可以指定某个方法可能raise
的异常,因此知道可能需要一个rescue
?
在Java(Doc)中,它看起来是这样的:
void example(int: x) throws Exception {
if x > 42 throw new Exception;
}
也许是这样!
# typed: true
extend T::Sig
sig {params(x: Integer).void.raises(StandardError)}
def example(x)
raise RuntimeError if x > 42
end
不要感到困惑:通常的异常是在Ruby中使用raise ... rescue
处理的。
begin
raise StandardError
rescue StandardError
end
但是您也可以throw
个对象,并catch
用Ruby来实现。
catch(:something) do
throw :something
end
我用的不是很多。实际上试图完全避免它。但是Sorbet可能对此也有语法!例如:
# typed: true
extend T::Sig
sig {params(x: Integer).void.throws(:something)}
def example(x)
throw :something if x > 42
end
catch (:something) {example(42)}
答案 0 :(得分:0)
Sorbet不支持检查的异常。 原因是当今使用Java的人们之间普遍达成共识,即他们甚至无法使用Java的其他功能。例如,在下面的代码段中
foo do
# code that calls into something that can throw
end
在Java中,您正式被迫在#
内捕获异常,并将其作为未经检查的异常重新抛出,因为通常该块可能会溢出到堆中。
总体而言,如果您研究遵循Java的语言:Scala和Kotlin,它们都不支持检查的异常。