2014-04-23 3 views
4

아는 한 형식 제약 조건을 추가하는 두 가지 방법이 있습니다.암시 적 형식 제약 조건으로 사용하기

trait Dummy 

첫번째 방법

def doStuff[T <: Dummy](x: T) = x 

번째 방법

def doStuff[T](x: T)(implicit x: T <:< Dummy) = x 

모두 동일한 결과를 달성한다.

저는 어떤 종류의 시나리오를 상한값 또는 하한값을 직접 사용해야하는지, 또는 형식에 제약 조건을 추가하기 위해 암시 적으로 사용해야하는지 궁금합니다.

답변

5

호출 할 때마다 암시 적 개체를 만들어야하고 다른 개체는 함수에 전달 된 개체에 형식 제약 조건을 넣기 만합니다. 일반적으로 암묵적인 표현이 아닌 [T <: Dummy]이라는 진술을 선호합니다.

암시 적으로는 특정 제약 조건을 충족시키는 경우에만 특정 작업을 수행 할 수있는 유형을 만들고 싶을 때 사용합니다. 따라서, 당신은 List[A] 선언은 다음을 참조하십시오

당신은 어떤 유형을 배치 할 수 있습니다 "라고 말하는 좋은 방법이다
def sum(implicit ev: Numeric[A]) = ... 

'A'클래스에서하지만 당신은 '합'이 준수해야 사용하려는 경우 ... "예를 들어 다음의 클래스 정의를 가지고 : 이것은 Foo[Int]의 몇 가지 유형을 만들기 위해 나에게 옵션을 허용하고 그것을 작동하지만 나를 T하지 않는 한 클래스의 specialSauce 메소드를 호출을 허용하지 않습니다

class Foo[T](value: T){ 
    def doubleString = value.toString() + value.toString() 

    def specialSauce(implicit ev: T <:< Dummy): Dummy = ... 
} 

을 는 직접 자손입니다 (Dummy).

+0

답장을 보내 주셔서 감사합니다. 바로 제가 원하는 것입니다. –

관련 문제