Scala:没有var的分支指令?

Dot*_*tan 1 scala

在scala中使用分支指令时,最佳做法是什么?

让我说我有这个代码:

val initial  = Something(...)
val afterOp1 = initial.op1()
val afterOp2 = afterOp1.op2()
val result   = afterOp2.op3()
Run Code Online (Sandbox Code Playgroud)

但是,现在有用于OP2两个选项:op2a,op2b

我可以轻松地编写代码var:

val initial  = Something(...)
val afterOp1 = initial.op1()
var afterOp2 = Nil
if (useA) {
  afterOp2 = afterOp1.op2a()
} else {
  afterOp2 = afterOp1.op2b()
}
val result = afterOp2.op3()
Run Code Online (Sandbox Code Playgroud)

但后来我失去了不变性.另一种没有变量的解决方案是

val initial  = Something(...)
val afterOp1 = initial.op1()
var afterOp2 = Nil
if (useA) {
  val afterOp2 = afterOp1.op2a()
  val result   = afterOp2.op3()
} else {
  val afterOp2 = afterOp1.op2b()
  val result   = afterOp2.op3()
}
Run Code Online (Sandbox Code Playgroud)

但这显然是不可取的,因为我必须重复代码.

这里的最佳做法是什么?我有一种感觉,我忽略了一些简单的事情

Yuv*_*kov 5

if-elseScala的一个很好的属性是它是一个表达式,它返回一个值.

假设op2aop2b产生相同类型,您可以做的最简单的事情是:

val initial  = Something(...)
val afterOp1 = initial.op1()
val afterOp2 = if (useA) afterOp1.op2a() else afterOp1.op2b()
val result = afterOp2.op3()
Run Code Online (Sandbox Code Playgroud)