¿Cuáles son algunas ideas para expresar esta función en Scala "idiomático". O más precisamente, ¿hay alguna manera de eliminar los vars locales sin sacrificar la legibilidad?Idiomatic Scala solución al código imperativo
def solve(threshold: Int)(f: Int => Int): Int = {
var sum = 0
var curr = 0
while(sum < threshold) {
sum += f(curr)
curr += 1
}
curr
}
Lo único que se me ocurrió fue esto, pero es más largo y menos legible en mi opinión.
def solve2(threshold: Int)(f: Int => Int): Int = {
val resultIterator = Iterator.iterate (0, 0) { case (curr, sum) =>
(curr + 1, sum + f(curr))
}
(resultIterator find (_._2 >= threshold)).get._1
}
Fue difícil decidir cuál de ellos para hacer _correct_ ya que todos eran buenos, así que elegí el que parecía más intuitiva a yo –
@ La solución de Dan Burton me dio los trucos más nuevos para la caja de herramientas. –