如何在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表示一个函数或一段可执行代码.这个答案已经提到了. 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) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |