【问题标题】:Programmatically setting Repeated Parameters in Scala在 Scala 中以编程方式设置重复参数
【发布时间】:2009-08-11 14:43:58
【问题描述】:

我正在尝试使用可变数量的井...Futures 调用Futures.awaitAllawaitAll 定义为 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 章也没有给我任何提示如何解决这个问题,所以欢迎提供帮助 :)

【问题讨论】:

  • 这确实在 PinS 中的某处提到过,但非常简短。

标签: scala language-features variadic-functions


【解决方案1】:

使用 * 表示它是一个 vararg...它可以采用与您添加一样多的 Future[Any] 参数,但不能采用它们的列表/数组。

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

Futures.awaitAll(1000, future1, future2)

而不是

Futures.awaitAll(1000, list)

编辑:如果你必须有能力传入 Futures.awaitAll(1000, list),然后尝试强制转换它。

所以试试这个:

Futures.awaitAll(1000, list: _*)

【讨论】:

    【解决方案2】:
    Futures.awaitAll(1000, futures: _*)
    

    应该可以工作(现在无法测试)。参见Scala Language Specification中的4.6.2。

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 1970-01-01
      • 2021-08-26
      • 2018-11-15
      • 2014-12-07
      • 2018-11-14
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多