лямбда-функция не захватывает окружающие переменные

f (code: String): String - это новая функция кода, она принимает одну старую строку кода и генерирует новую строку кода.

def getNewCodes(oldCodes: Array[String]): Array[String] = {
        val newCodes: Array[String] = Array()
        oldCodes.foreach(code => newCodes :+ f(code)) // newCodes is not captured by the lambda function
        newCodes // returns the empty array
    }

Я передал лямбда-функцию для получения нового кода и обновил его до массива newCodes. Новый массив кода должен быть возвращен в конце функции. Но пустой массив возвращается.

Кажется, лямбда-функция не newCodes переменную newCodes Почему?

Всего 1 ответ


Сбор ответов из комментариев дает следующее решение:

def getNewCodes(oldCodes: Array[String]): Array[String] =
  oldCodes.map(f)

На практике вы обычно просто пишете это в строке и не беспокоитесь об отдельном методе, тем более что не ясно, откуда берется f .


Есть идеи?

10000