Есть ли уже существующий/Scala-идиоматический/лучший способ сделать это?
def sum(x: Int, y: Int) = x + y
var x = 10
x = applyOrBypass(target=x, optValueToApply=Some(22), sum)
x = applyOrBypass(target=x, optValueToApply=None, sum)
println(x) // will be 32
Мой applyOrBypass можно определить так:
def applyOrBypass[A, B](target: A, optValueToApply: Option[B], func: (A, B) => A) = {
optValueToApply map { valueToApply =>
func(target, valueToApply)
} getOrElse {
target
}
}
В основном я хочу применять операции в зависимости от того, определены ли определенные значения Option или нет. Если это не так, я должен получить ранее существовавшее значение. В идеале я хотел бы связать эти операции и не использовать var.
Моя интуиция подсказывает мне, что потребуется свернуть или уменьшить, но я не уверен, как это будет работать. Или, может быть, есть другой подход с monadic-fors...
Любые предложения/подсказки приветствуются!