将其他参数传递给map()中传递的函数

Vam*_*msi 1 scala scala-collections

我想将一个函数传递给map(),它需要使用额外的数据(例如作为参数传递给scala程序的数据).

例如:

我有一个清单:

val myList = List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

并将乘数值作为命令行参数传递.

val multiplier = args(0) // In this example, let it be 2
Run Code Online (Sandbox Code Playgroud)

我有一个功能

def multiply(a: Int, b: Int) = a*b
Run Code Online (Sandbox Code Playgroud)

现在我想在我的List上执行map(),如下所示:

myList.map(multiply)
Run Code Online (Sandbox Code Playgroud)

当然这不起作用,因为map只需要一个参数(在本例中是list的元素).

请帮助我如何传递函数来映射哪些使用其他参数.

Ran*_*niz 7

你可以用currying来做到这一点

def multiply(a: Int)(b: Int) = a*b
myList.map(multiply(multiplier))
Run Code Online (Sandbox Code Playgroud)

或者,如果multiply不是您的方法:

val multiplyCurried = Function.curried(multiply _)
myList.map(multiplyCurried(multiplier))
Run Code Online (Sandbox Code Playgroud)