试图避免scala中的mutable ..这是正确的方法吗?

ope*_*sas 1 variables scala immutability

我试图尽可能地避免变量变量,但有时它感觉太难了,我不想以极其复杂的代码结束

不过我找到了这种方式,但它确实感觉像作弊

我正在解析一个查询,我发现找到一个字段!值,我想把它翻译成字段:<>值,然后继续处理,所以我出来了这段代码以避免变异,或者至少有他们被限制......

val (operator, negated) = {
  var operator = ConditionOperator.toConditionOperator(parsedOperator)
  var negated = parsedNegated == "!"
  // field!value => field notEqual value
  if (negated && operator == ConditionOperator.Unknown) {
    negated = false
    operator = ConditionOperator.NotEqual
  }
  (operator, negated)
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?或者是否有更惯用(和清晰!)的方式来实现这种事情?

dhg*_*dhg 6

这确实是作弊,因为它var是可变的!

解决这个问题的方法是直接返回if语句的结果:

val (operator, negated) = {
  val operator = ConditionOperator.toConditionOperator(parsedOperator)
  val negated = parsedNegated == "!"
  // field!value => field notEqual value
  if (negated && operator == ConditionOperator.Unknown)
    (ConditionOperator.NotEqual, false)
  else
    (operator, negated)
}
Run Code Online (Sandbox Code Playgroud)