Scala: как указать varargs как тип?

Вместо

def foo(configuration: (String, String)*)

Я хотел бы смочь записать:

type Configuration =  (String, String)*
def foo(configuration: Configuration)

Основной вариант использования состоит в том, чтобы обеспечить легкую сигнатуру метода при переопределении в подклассах

ОБНОВЛЕНИЕ: Я могу приблизиться

type Param = (String, String)
def foo(configuration: Param*)

Но есть ли способ сделать его лучше?

6
задан IttayD 15 March 2010 в 10:45
поделиться

3 ответа

Нет, * допускается только для ParamType, то есть типа параметра анонимной функции или метода.

4.6.2 Повторяющиеся параметры Синтаксис: ParamType ::= Type '' Последнее значение параметра в секции параметров может иметь суффикс "", например, (..., x:T *). Тип такого повторяющегося параметра внутри метода является последовательность типа scala.Seq[T ]. Методы с повторяющимися параметрами T * принимают переменное количество аргументов типа T.

Ошибка компилятора в примере @Eastsun находится в первой строке, а не во второй. Это не должно быть разрешено:

scala> type VarArgs =  (Any*)
defined type alias VarArgs

Я поднял ошибку.

Это аналогичное ограничение для By-Name Parameters. В этом случае компилятор предотвращает создание псевдонима типа:

scala> type LazyString = (=> String) <console>:1: error: no by-name parameter type allowed here
       type LazyString = (=> String)

Ваша последняя попытка - стандартный способ выразить это.

9
ответ дан 9 December 2019 в 20:41
поделиться

Я думаю, вы могли бы использовать

type Configuration =  ((String, String)*)
def foo(configuration: Configuration)

Но это вызывает сбой компилятора (2.8.0.r21161-b20100314020123). Кажется ошибка компилятора scala.

2
ответ дан 9 December 2019 в 20:41
поделиться

Вы можете определить это как

type Param = (String, String)
type Configuration = Seq[Param]

def foo(configuration : Configuration)

пользователь должен создать экземпляр Seq

foo(List("1"->"2"))

, что не является оптимальным.

1
ответ дан 9 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: