2016-01-31 3 views
1

Есть ли способ получить arity функции? Например, учитывая следующую функцию:Получить функцию arity в scala

def moop[I,O](func: I => O) = { 
    val arity = I.??? 
    ??? 
} 

Как бы я получить арность func?

+4

Как это могло быть что-то кроме 1? –

+0

Например, 'I' может быть типом кортежа – irundaia

+5

AFAIK, кортежи все еще один операнд. – Hiura

ответ

3

Если I является кортежем, вы можете позвонить на него productArity, который унаследован от Product.

Если у вас есть объект, о котором вы только знаете, это какая-то функция, вам нужно будет проверить (конечный) набор классов FunctionN, так как нет общего супертипа как для кортежей. Похоже, что у нас есть Function0 до Function22.

+0

Я думаю, что прибегну к sbt-шаблону, чтобы генерировать конкретные функции создания для всех возможных явлений. – irundaia

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