Вам нужно будет поставить :_*
за параметром, чтобы сообщить компилятору, что это не один аргумент, а весь набор аргументов:
action(closeables :_*)
Отредактируйте ваш второй вопрос в комментарии: Для вашей конкретной проблемы может быть лучше выбрать не varargs, а полученный Seq
напрямую в сочетании с частичной функцией:
def usingva[T <: Closeable, R](closeables: T*)(action: PartialFunction[Seq[T], R]): Unit = {
try {
action(closeables)
}
finally {
//...close everything...
}
}
тогда это можно использовать так:
usingva(new FileWriter(file), new FileWriter(file) {
case Seq(fw1,fw2) => ... // You can use fw1 and fw2 seperately here
}
К сожалению, нет способа сделать этот тип безопасным (т. Е. Проверить, что количество параметров соответствует функции во время компиляции), за исключением создания функций using
для всех чисел параметров, потому что в scala отсутствует целочисленная поддержка на уровне типов , Та же проблема, что и у кортежей ... вот почему на самом деле существуют классы Tuple1
, Tuple2
, ..., Tuple22
(Да ... они останавливаются на 22)