2013-07-24 3 views
4

특성이 메서드의 구체적인 구현을 제공하도록 지정하는 방법이 있습니까? 스칼라 특성으로 특정 메서드를 구현하도록하십시오.

이 프로그램을 컴파일하는 몇 가지 믹스 인

class A extends B with C { 
    foo() 
} 

을 감안할 경우 A, B, 또는 C 구현 foo() 중 하나. 그러나 우리가 어떻게 Bfoo의 구현을 포함하도록 강제 할 수 있습니까?

답변

9

는 다음과 같은 작업을 수행 할 수 있습니다 Bfoo을 구현하는 경우

class A extends B with C { 
    super[B].foo() 
} 

이 단지 컴파일합니다. 그러나 (잠재적으로) 일부 비 직관적 인 결합을 유도하기 때문에주의해서 사용하십시오. 또한 Afoo을 무시하면 여전히 Bfoo이 호출됩니다.

trait B { def foo() = println("B") } 
trait C { def foo() = println("C") } 
class A extends B with C { 
    override def foo() = super[B].foo() 
} 

당신이 B당신은 형의 귀속을 사용할 수foo 선언 있는지 확인하려면 :

class A extends B with C { 
    (this:B).foo() 
} 

이는 B 경우 컴파일

하나 개 이럴 유효한 사용 사례 conflict resolution입니다 foo을 선언합니다 (단,에 구현 될 수 있음).또는 A).

관련 문제