首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sorbet中使用raise / throw的方法的语法

在Sorbet中使用raise / throw的方法的语法
EN

Stack Overflow用户
提问于 2019-08-12 09:10:43
回答 1查看 429关注 0票数 1

有没有一种方法可以指定一个方法可能raise哪些异常,这样就可以知道哪些异常可能需要rescue

在Java (Doc)中,它是这样的:

代码语言:javascript
复制
void example(int: x) throws Exception {
  if x > 42 throw new Exception;
}

也许是这样的!?

→ View on sorbet.run

代码语言:javascript
复制
# typed: true
extend T::Sig

sig {params(x: Integer).void.raises(StandardError)}
def example(x)
  raise RuntimeError if x > 42
end

不要混淆:通常的异常都是使用Ruby语言中的raise ... rescue来处理的。

代码语言:javascript
复制
begin
  raise StandardError
rescue StandardError
end

但是你也可以在Ruby语言中对对象进行throwcatch

代码语言:javascript
复制
catch(:something) do
  throw :something
end

我不经常用这个。实际上是想完全避免这种情况。但是,冰沙也可能有这样的语法!?例如:

→ View on sorbet.run

代码语言:javascript
复制
# 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)}
EN

回答 1

Stack Overflow用户

发布于 2019-08-13 00:52:57

Sorbet不支持已检查的异常。原因是,现在从事Java工作的人们普遍认为,他们甚至不能很好地与Java的其他特性一起工作。例如,在下面的代码片段中

代码语言:javascript
复制
foo do
  # code that calls into something that can throw
end

在Java语言中,正式要求您捕获#内部的异常,并将其作为未经检查的异常重新抛出,因为通常情况下,块可能会转义到堆中。总体而言,如果您查看Java之后的语言: Scala、Kotlin,它们都不支持检查异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57454717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档