Идиоматическое решение Scala для императивного кода

Какие есть идеи для выражения этой функции в «идиоматической» Scala. Или, точнее, есть ли способ удалить локальные переменные без ущерба для читабельности?

def solve(threshold: Int)(f: Int => Int): Int = {
  var sum = 0
  var curr = 0
  while(sum < threshold) {
   sum += f(curr)
   curr += 1
  }
  curr
}

Единственное, что я смог придумать, это вот это, но, на мой взгляд, оно длиннее и менее читабельно.

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
}
9
задан JoeDred 19 June 2013 в 06:34
поделиться