我有一个这样的例子:
def demo(a: Int, b: Int, c:Int): Int = {
if (a == 1)
return 10
if (b == 2)
return 20
if (c == 3)
return 30
40
}
代码运行良好,但是我知道在Scala中,我们尝试避免返回。所以我想请问有什么其他方法可以避免退货? 谢谢
已编辑 这是我的真实情况,我想避免退货。
post("/") {
if (product_id <= 0)
return BadRequest(Map("ERROR" -> "PRODUCT_ID IS WRONG"))
if (file_id.isEmpty())
return BadRequest(Map("ERROR" -> "FILE ID NOT FOUND"))
if (data_type.isEmpty())
return BadRequest(Map("ERROR" -> "FILE TYPE NOT FOUND"))
if (data_type.get != "cvs")
return BadRequest(Map("ERROR" -> "FILE TYPE IS WRONG"))
OK(Map("SUCCESS" -> "THANK YOU"))
}
答案 0 :(得分:11)
如果没有,基本选项是使用
if (a == 1) 10 else if (b == 2) 20 else if (c == 3) 30 else 40
另一种选择是使用模式匹配:
def demo(a: Int, b: Int, c: Int): Int = (a, b, c) match {
case (1, _, _) => 10
case (_, 2, _) => 20
case (_, _, 3) => 30
case _ => 40
}
答案 1 :(得分:0)
您可以对大量参数执行类似的操作:
def demo(ints: Int*) =
ints.foldLeft((0, 1, 40)) { (acc, i) =>
if (acc._2 == i && acc._1 == 0) (1, acc._2, i * 10)
else (acc._1, acc._2 + 1, acc._3)
}._3
我不确定它是否易于阅读,但是如果您有很多论点,也许应该考虑一下。 一些说明:在foldLeft中,我们以(0,1,40)开头,如果发现返回值,则为0;如果为int,则为索引;为40,是结果;如果发现要返回的另一个值,它将为被替换。如果“演示”只是解释您遇到的另一个问题的简单方法,则应替换条件,并根据您的实际问题得出结果。