2014-05-12 4 views
1
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 (목록 ​​(R, t))) (목록 (1,2,3,4)) 처음에

을 I는하지 입력 할 수 발견 된 두 번째 유형 불일치; 발견 : Int (1) required : Nothing

분명히 뭔가가 빠졌지 만,이 경우 형식 구문을 이해하지 못합니다. 당신은 어떤 유형의 시퀀스에서 작동하는 tr을 원하는 경우에

+1

당신은 아마'데프 rThenT [A] = Function.chain (목록 ​​(R 뭔가를 원하는 [A ], t [A])),하지만 당신이 무엇을하려고하는지는 분명하지 않습니다. – wingedsubmariner

+0

이것은 내가 할 수있는 최선의 방법일까요? 나는 Function.chain (List (r [A], t [A])))에 유형 'A'를 도입하려고 시도 했었고 함수를 정의하지 않고이를 수행하는 방법을 모릅니다. –

+0

익명 함수를 사용할 수 없습니다 형식 매개 변수, 메서드 만. 실제로'def'를 사용할 필요가 없게됩니다. – wingedsubmariner

답변

1

, 당신이 할 수 있습니다 :

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))