Scala 声明一个不使用';我不能在斯卡拉回来

Scala 声明一个不使用';我不能在斯卡拉回来,scala,Scala,是否可以在Scala中声明“no return”函数?即 def abort(): ! = { System.exit(1); } (本例中的!取自Rust,它意味着:输入此函数是单向的,我们永远不会从中返回)这正是Nothing类型所表示的内容—一个永远不会返回值的方法或表达式。它是引发异常的表达式类型,例如: scala> :type throw new Exception() Nothing Scala还提供了一个特殊的?操作符,用于在开发过程中让代码进行类型检查 sca

是否可以在Scala中声明“no return”函数?即

def abort(): ! = {
    System.exit(1);
}

(本例中的
取自Rust,它意味着:输入此函数是单向的,我们永远不会从中返回)

这正是
Nothing
类型所表示的内容—一个永远不会返回值的方法或表达式。它是引发异常的表达式类型,例如:

scala> :type throw new Exception()
Nothing
Scala还提供了一个特殊的
操作符,用于在开发过程中让代码进行类型检查

scala> :type ???
Nothing
Nothing
是其他所有类型的子类型,因此可以在任何需要任何类型的地方使用类型为
Nothing
的表达式。

使用:

这种类型的表达式不能正常返回,但可以进入无限循环或抛出异常。但是,在示例中不能什么都不使用,因为System.exit有一个签名,表示它返回单位。相反,您可以尝试以下方法使编译器满意:

def abort(): Nothing = {
  System.exit(1);
  ???  // Unreachable
}

一些现实世界的例子:

导入akka.actor.ActorSystem
导入akka.http.scaladsl.http
导入akka.stream.Actormatarializer
进口zio_
对象服务器扩展应用程序{
val程序:ZIO[任何,可丢弃,无]=
UIO(ActorSystem())。括号(terminateSystem){隐式系统=>
隐式val mat=Actormatarializer()
为了{
_ 
Http().bindAndHandle(路由,“localhost”,8080)
}
_  1, _ => 0)
}

不使用任何东西,其主要用途是发出终止信号。(Scala官方文档) 通常情况下,nothing不会返回任何内容,即使是计算,也不会用于连续引发异常的方法。

您可以使用
sys.exit()
:)
def abort(): Nothing = {
  System.exit(1);
  ???  // Unreachable
}