【发布时间】:2021-05-03 10:41:13
【问题描述】:
在我们使用 Scala 2.12 的项目中,我们复制了 the ChainingOps from Scala 2.13。我们经常使用它,我们又增加了一种方法:pipeIf - 当谓词为false 时,我们将值不变地传递。
def pipe[B](f: A => B): B = f(self)
def pipeIf(cond: Boolean)(f: A => A): A = if (cond) f(self) else self
我现在正在尝试移植到 Scala 2.13,这个pipeIf 让我有点担心。此包中的所有其他方法(pipe 和 tap)已包含在 Scala 2.13 库中。我宁愿完全移除我们的包裹,但是这个pipeIf 像拇指酸痛一样伸出来。
处理“有条件地管道”的惯用方式是什么?它并没有那么糟糕,但一个抱怨是它阻止了使用下划线形式。用冗长的if/else形式是正常的,还是有别的办法?
val newState = state.pipeIf(dt != 0)(_.simulate(dt))
val newState = state.pipe(state => if (dt != 0) state.simulate(dt) else state )
【问题讨论】:
标签: scala functional-programming idioms