处理多个选项的最佳方式 scala
best way to handle multiple options scala
我目前正在使用一些具有多种选项类型的 Scala 代码,我需要在一个对象上设置它们(如果它们存在的话
目前我正在做以下事情
def myFunc(arg1: Option[Int], arg2: Option[Float]) {
val objSet1 = arg1.fold(obj)(obj.setArg1)
val objSet2 = arg2.fold(objSet1)(objSet1.setArg2)
obj.runComputation()
}
我觉得有一种方法可以通过 for 理解更优雅地做到这一点,但我的 monad 思维让我无法理解如何...
我认为实际上没有内置任何东西,但您可以这样做:
implicit class MaybeModifyOps [T](underlying: T) {
def maybeModify[X](a: Option[X])(f: (T,X) => T): T = a.fold(underlying)(f(underlying,_))
}
并像这样使用它:
obj
.maybeModify(arg1)(_ setArg1 _)
.maybeModify(arg2)(_ setArg2 _)
.runComputation()
我目前正在使用一些具有多种选项类型的 Scala 代码,我需要在一个对象上设置它们(如果它们存在的话
目前我正在做以下事情
def myFunc(arg1: Option[Int], arg2: Option[Float]) {
val objSet1 = arg1.fold(obj)(obj.setArg1)
val objSet2 = arg2.fold(objSet1)(objSet1.setArg2)
obj.runComputation()
}
我觉得有一种方法可以通过 for 理解更优雅地做到这一点,但我的 monad 思维让我无法理解如何...
我认为实际上没有内置任何东西,但您可以这样做:
implicit class MaybeModifyOps [T](underlying: T) {
def maybeModify[X](a: Option[X])(f: (T,X) => T): T = a.fold(underlying)(f(underlying,_))
}
并像这样使用它:
obj
.maybeModify(arg1)(_ setArg1 _)
.maybeModify(arg2)(_ setArg2 _)
.runComputation()