Цепочка и типы функций Scala

def t[A] = (l:Seq[A]) => l tail
def r[A] = (r:Seq[A]) => r reverse

(Function.chain(List(r[Int], t[Int])))(List(1,2,3,4))

Список (3, 2, 1)

как и ожидалось. Однако как я могу обобщить типы? Если я скажу:

(Function.chain(List(r[A], t[A])))(List(1,2,3,4))

или (Function.chain (List (r, t))) (List (1,2,3,4))

В первом я получаю тип А, не найденный, а во втором - несоответствие типа; найдено: Int (1) требуется: Ничего

Очевидно, что-то не хватает, но я не понимаю синтаксис типа в этом случае.


person Alex Peake    schedule 12.05.2014    source источник
comment
Вы, вероятно, хотите что-то вроде def rThenT[A] = Function.chain(List(r[A], t[A])), но не совсем понятно, что вы пытаетесь сделать.   -  person wingedsubmariner    schedule 12.05.2014
comment
Наверное, это лучшее, что я могу сделать? Я пытался ввести тип «A» в (Function.chain (List (r [A], t [A]))) и не знаю, как это сделать, не определяя функцию   -  person Alex Peake    schedule 12.05.2014
comment
Анонимные функции не могут принимать параметры типа, только методы. На самом деле нет никакого способа обойтись без использования def.   -  person wingedsubmariner    schedule 12.05.2014


Ответы (1)


Если вы хотите, чтобы t и r работали с последовательностями любого типа, вы можете сделать это:

def t = (l: Seq[Any]) => l.tail
def r = (l: Seq[Any]) => l.reverse

(Function.chain(List(r, t)))(List(1, 2, "three", 4, 5))
person Ben Kovitz    schedule 12.05.2014