是否可以在Scala中声明“不返回”功能?即
def abort(): ! = {
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
(!
本例中的取自Rust,这意味着:进入此函数是单程旅行,我们将永远不会从中返回)
Tra*_*own 11
这正是Nothing
类型所代表的含义-一种永远不会返回值的方法或表达式。这是引发异常的表达式的类型,例如:
scala> :type throw new Exception()
Nothing
Run Code Online (Sandbox Code Playgroud)
Scala还???
为该类型提供了一个特殊的运算符,通常用于在开发过程中获取用于类型检查的代码。
scala> :type ???
Nothing
Run Code Online (Sandbox Code Playgroud)
Nothing
是其他所有内容的子类型,因此您可以Nothing
在需要任何类型的任何地方使用类型的表达式。
Bri*_*hon 10
使用没有:
def loop: Nothing = loop
Run Code Online (Sandbox Code Playgroud)
这种类型的表达式不能正常返回,但是可以进入无限循环或引发异常。但是,您不能在示例中使用Nothing,因为System.exit有一个签名,表明它返回Unit。相反,您可以尝试执行以下操作使编译器满意:
def abort(): Nothing = {
System.exit(1);
??? // Unreachable
}
Run Code Online (Sandbox Code Playgroud)