有没有一种方法可以指定一个方法可能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但是你也可以在Ruby语言中对对象进行throw和catch。
catch(:something) do
throw :something
end我不经常用这个。实际上是想完全避免这种情况。但是,冰沙也可能有这样的语法!?例如:
# 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)}发布于 2019-08-13 00:52:57
Sorbet不支持已检查的异常。原因是,现在从事Java工作的人们普遍认为,他们甚至不能很好地与Java的其他特性一起工作。例如,在下面的代码片段中
foo do
# code that calls into something that can throw
end在Java语言中,正式要求您捕获#内部的异常,并将其作为未经检查的异常重新抛出,因为通常情况下,块可能会转义到堆中。总体而言,如果您查看Java之后的语言: Scala、Kotlin,它们都不支持检查异常。
https://stackoverflow.com/questions/57454717
复制相似问题