在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)
但这显然是不可取的,因为我必须重复代码.
这里的最佳做法是什么?我有一种感觉,我忽略了一些简单的事情
if-elseScala的一个很好的属性是它是一个表达式,它返回一个值.
假设op2a并op2b产生相同类型,您可以做的最简单的事情是:
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)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |