使用列表中的参数调用函数

Gra*_*ate 5 scala

有没有办法用列表中的参数调用函数?Python中的等价物是sum(*args).

// Scala

def sum(x: Int, y: Int) = x + y
val args = List(1, 4)

sum.???(args)      // equivalent to sum(1, 4)
Run Code Online (Sandbox Code Playgroud)

sum(args: _*)不会在这里工作.不管怎样,不要提供改变功能的声明.我熟悉一个具有重复参数的函数def sum(args: Int*).

0__*_*0__ 2

嗯,你可以写

sum(args(0), args(1))
Run Code Online (Sandbox Code Playgroud)

但我假设您希望它适用于任何列表长度?那么你会选择foldor reduce

args.reduce(sum)  // args must be non empty!

(0 /: args)(sum)  // aka args.foldLeft(0)(sum)
Run Code Online (Sandbox Code Playgroud)

这些方法假设列表成对减少。例如,foldLeft[B](init: B)(fun: (B, A) => B): B将 type 的元素列表缩减A为 type 的单个元素B。在这个例子中,A = B = Int . 它从初始值开始init。由于您想要求和,因此空列表的总和为零。然后,它使用当前累加器(运行总和)和列表中的每个连续元素调用该函数。

所以就像

var result = 0
result = sum(result, 1)
result = sum(result, 4)
...
Run Code Online (Sandbox Code Playgroud)

reduce方法假设列表非空,并且要求元素类型不更改(该函数必须从 2 映射Int到 1 Int)。