lambda函数无法捕获周围的变量

时间:2019-05-13 14:29:39

标签: scala lambda

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
    }

我通过了lambda函数来获取新代码并将其更新为newCodes数组。新的代码数组应在函数末尾返回。但是会返回一个空数组。

似乎lambda函数未捕获newCodes变量,为什么?

1 个答案:

答案 0 :(得分:4)

从评论中收集答案可提供以下解决方案:

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

在实践中,您通常只写一行代码,而不必担心使用单独的方法,特别是因为不清楚f的来源。