2016-04-11 2 views
3

У меня есть куча объектов типа SomeType[T]. Как и некоторые из них: SomeType[String], некоторые из них - SomeType[Int] и т. Д. Я хочу написать функцию, которая получает набор переменных размера (но, возможно, разных типов).входы переменного тока различного типа

Если я знаю, что типы все же я мог бы использовать что-то вроде следующего:

def someFun[T](inputs: SomeType[T]*): = { 
    // do something here on the list of inputs. 
} 

Любые идеи, как сделать его общим, так что он получает список входов с потенциально различными типами? (например, inputs: SomeType[String] и inputs: SomeType[Int]) BTW, я не хочу использовать SomeType[_], так как мне нужна информация о типе позже.

+1

Какой тип возвращает этот метод? Вы можете использовать wild card 'SomeType [_]', но вы потеряете информацию о типе ... поэтому ответ действительно зависит от того, что требует тело этого метода. То, что вы ищете, - это K-лист. –

+0

Хорошая точка. Я не могу сделать '_', так как мне нужна информация о типе позже: -/ – Daniel

+0

Взгляните на Shapeless '[HList] (https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0 .0 # гетерогенные-листы). – Aivean

ответ

1

Я не уверен, что вам нужна информация о типе, но если все, что вам нужно сделать, это отреагировать на ввод напрямую (без, скажем, передачи его другой функции и т. Д.), Тогда будет работать следующее:

И AFAIK, shapeless's HList не решает это, так как для его работы вам все же необходимо иметь типы upfront.

+0

Очень хорошее предложение. Но проблема в том, что я не знаю возможных типов априори. Но я могу попросить, чтобы клиент каким-то образом их передал. Возможно ли использовать теги типа переменной величины? – Daniel

Смежные вопросы