Scala:在 if 条件中声明 val

标签 scala

我有非常通用的用例。我有一个返回 Int 的方法 conditionMethod

def conditionMethod(..):Int = {..}

现在我有使用相同方法的 if 条件

if (conditionMethod(..) > 0){
  conditionMethod(..) + 23 // Any action
}

问题是它调用方法conditionMethod两次。为了解决这个问题,另一种方法是

val tmp = conditionMethod(..)
if (tmp > 0){
  tmp + 23 // Any action
}

我不喜欢的是我必须定义一个更大范围的变量。

我可以做类似的事情吗

if ((val tmp = conditionMethod(..)) > 0){  // tmp variable in if condition itself 
  tmp + 23 // Any action
}

Scala 版本:2.11

最佳答案

您可以保持范围非常狭窄:

val result = {
  val tmp = methodCall()
  if (tmp>0) tmp else tmp+23
}

或者使用匹配

methodCall() match {
   case x if x <= 0 => x + 23
   case x => x
}

关于Scala:在 if 条件中声明 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54341680/

相关文章:

python - Spark Streaming - 计算状态中的不同元素

scala - Scala Spark 中的 NullPointerException 似乎是由集合类型引起的?

scala - 如何修复 Scala (Akka 2.4.0) 中被逐出的库和不明确的引用错误?

scala - 如何在每个条目的所有行条目上获得 scala-spark 中数组类型列的平均值?

scala - 何时使用isInstanceOf和何时使用区分大小写语句(在Scala中)?

scala - 为什么 Scala 的 BigDecimal 没有零?

scala - 为什么我的递归函数不返回列表的最大值

java - Scala 是否对小型集合使用特殊实现?

scala - 在没有继承层次结构的scala中编写通用代码

scala - Null、Nil 和 Nothing 之间有什么区别?