2017-11-21 6 views
1

구체적인 유형 값을 지정하지 않고 Scala에서 벡터와리스트를 모두 허용하도록 할 수 있습니까? 그것은 또한 DoubleInt 값을 사용할 수 있도록스칼라 제네릭 메서드입니다. nummerical 값의 시퀀스를 받아 들일 수 있습니다.

def testFunc[V <: Seq[Int]](x: V) = x 

testFunc(List(1, 3)) // res0: List[Int] = List(1, 3) 
testFunc(Vector(1, 3)) // res1: scala.collection.immutable.Vector[Int] = Vector(1, 3) 

어떻게이 기능을 수정할 수 있습니다

는 지금 이런 일있어?

def testFunc[F[_], A : Numeric](x: F[A]): F[A] = x 

을 그리고 추론이 우리를 위해 작동 입력 :

우리는 방법 어떤 단항 타입 생성자 조금 일반화 유형의 반복을 피할 수

답변

1

는 (당신은 당신이 원하는 경우 F[_] <: Seq[_]에 대한 제약 조건을 추가 할 수 있습니다) :

val resFirst = testFunc(Seq(1.0,2.0,3.0)) 
val resSecond = testFunc(List(1,2)) 
+0

아 .. 그래서 함수를 호출 할 때 유형을 지정해야합니다. 감사합니다. 문서에서 찾을 수 없었습니다. – ritchie46

+0

@ ritchie46 그래, 타입 추론 .. –

+1

@ ritchie46 내 업데이 트를 참조하십시오, 그것은 메서드 호출을 예쁘게 만듭니다. –