带有一个原始参数的 Lambda
与
var listOfInt=(1 to 100).toList
listOfInt.foldRight(0)((current,acc)=>current+acc)
你有一个对两个参数进行操作的 lambda 函数。
具有一个元组类型参数的 Lambda
有
var listOfTuple=List((1,"a"),(2,"b"),(3," "))
listOfTuple.map(x => x._1.toString + x._2.toString)
你有一个 lambda 函数处理一个参数(Tuple2[Int, String] 类型)
两者都适用于类型推断。
带有一个参数的部分 lambda
有
listOfTuple.map{case (x,y) => x.toString + y.toString}
你有一个 lambda 函数,使用一个参数(Tuple2[Int, String] 类型)。然后,此 lambda 函数在内部使用 Tuple2.unapply 将一个参数分解为多个值。这仍然适用于类型推断。值的分解(“模式匹配”)需要case。
这个例子有点不直观,因为 unapply 返回一个 Tuple 作为它的结果。在这种特殊情况下,可能确实存在技巧,因此 Scala 直接使用提供的元组。但是我真的不知道有这样的把戏。
更新:带有柯里化的 Lambda 函数
确实有诀窍。与
import Function.tupled
listOfTuple map tupled{(x,y) => x.toString + y.toString}
您可以直接使用元组。但这当然是一个技巧:您提供了一个对两个参数而不是元组进行操作的函数。 tupled 然后获取该函数并将其更改为不同的函数,对元组进行操作。这种技术也称为uncurrying。
备注:
当y 已经是一个字符串时,y.toString 是多余的。这不被认为是好的风格。为了示例,我将其保留。您应该在实际代码中省略它。