Программная настройка повторяющихся параметров в Scala - PullRequest
1 голос
/ 11 августа 2009

Я пытаюсь позвонить Futures.awaitAll с переменным номером скважины ... Future с. awaitAll определяется как awaitAll(timeout : Long, fts : Future[Any]*). Я попытался передать List и Array, но оба не будут работать:

list = future1 :: future2 :: Nil

Futures.awaitAll(1000, list)

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

РЕДАКТИРОВАТЬ: Теперь я хочу программно вызвать Futures.awaitAll с переменным количеством аргументов (от 1 до n). Так что использование Futures.awaitAll(1000, future1, future2) не вариант.

Глава 8.8 Программирование в Scala также не давала мне подсказок, как решить эту проблему, поэтому помощь приветствуется:)

Ответы [ 2 ]

10 голосов
/ 11 августа 2009

Использование * означает, что это переменная ... она может принимать столько Future [Any] параметров, сколько вы добавляете, но не список / массив из них.

Так что он ищет список параметров, таких как:

Futures.awaitAll(1000, future1, future2)

вместо

Futures.awaitAll(1000, list)

Редактировать: Если у вас должна быть возможность передать в Futures.awaitAll (1000, список), попробуйте разыграть его.

Так попробуйте это:

Futures.awaitAll(1000, list: _*)
1 голос
/ 11 августа 2009
Futures.awaitAll(1000, futures: _*)

должно работать (не могу проверить это сейчас). См. 4.6.2 в Спецификации языка Scala .

...