以编程方式在Scala中设置重复参数

时间:2009-08-11 14:43:58

标签: scala language-features variadic-functions

我正在尝试使用可变数量的井Futures.awaitAll来调用FutureawaitAll定义为awaitAll(timeout : Long, fts : Future[Any]*)。我尝试传入ListArray,但两者都不起作用:

list = future1 :: future2 :: Nil

Futures.awaitAll(1000, list)

found : List[scala.actors.Future[Any]] required: scala.actors.Future[Any]

编辑:我现在要做的是使用可变数量的参数(1到n)以编程方式调用Futures.awaitAll。因此,使用Futures.awaitAll(1000, future1, future2)不是一种选择。

Scala编程的第8.8章没有给我任何提示如何解决这个问题,所以欢迎提供帮助:)

2 个答案:

答案 0 :(得分:10)

使用*表示它是一个变量...它可以在您添加时使用尽可能多的Future [Any]参数,但不包含它们的列表/数组。

所以它正在寻找一个参数列表,例如:

Futures.awaitAll(1000, future1, future2)

而不是

Futures.awaitAll(1000, list)

编辑:如果您必须能够传入Futures.awaitAll(1000,list),那么请尝试投射它。

所以试试这个:

Futures.awaitAll(1000, list: _*)

答案 1 :(得分:1)

Futures.awaitAll(1000, futures: _*)

应该工作(现在不能测试)。请参阅Scala Language Specification中的4.6.2。