加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中突破或退出void方法?

发布时间:2020-12-16 09:51:35 所属栏目:安全 来源:网络整理
导读:这是一个非常基本的问题,但我似乎无法在任何地方找到答案.在没有返回值的 Scala方法中,如何提前退出方法? 例如, def printPositiveNumbersSum (n1: Int,n2: Int) = { if (n1 0 || n2 0) // How do I break out of this method here? println(n1 + n2)} 试图
这是一个非常基本的问题,但我似乎无法在任何地方找到答案.在没有返回值的 Scala方法中,如何提前退出方法?

例如,

def printPositiveNumbersSum (n1: Int,n2: Int) = {
    if (n1 < 0 || n2 < 0)
        // How do I break out of this method here?
    println(n1 + n2)
}

试图像在Java中一样使用return会引发一个错误,即printPositiveNumbersSum没有返回类型.

我知道我可以将它作为if-else语句,但是如果有多个条件我想退出该方法并返回其调用者,那么这很快变得难以处理.

解决方法

基本问题有一种比他们看起来更有趣的习惯.有几种方法可以解决这个问题,可能值得考虑作为替代方案.但基础是,一切都返回某种类型的值,编译器试图找出该类型是什么.在您的情况下,printPostiveNumbersSum返回某种类型的东西.

>让你的方法返回一个单位.类型Unit表示一个函数或一段可执行代码.这个答案已经提到了.
>考虑为总和返回Option [Int].如果验证成功,则返回Some(sum),如果失败则返回None.然后调用者可以决定在失败的情况下做什么,也许使用匹配{case Some(sum)…构造.

def positiveNumbersSum (n1: Int,n2: Int): Option[Int] = {
  if (n1 < 0 || n2 < 0)
    None
  else Some(n1 + n2)
}

>但是在更复杂的情况下,当您可能需要考虑更多规则时,返回失败的原因而不仅仅返回None是很方便的.在这种情况下,我发现要么方便.您可以指定两种返回类型.同样,调用者可以区分匹配{case Left(reason)… case Right(sum)… construct.

def positiveNumbersSum (n1: Int,n2: Int): Either[String,Int] = {
  if (n1 < 0 || n2 < 0)
    Left("One of the numbers is negative")
  else Right(n1 + n2)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读