복붙노트

[SCALA] 디폴트가 사용됩니다 암시하는 변환을 제어 할 수있는 방법이 있습니까?

SCALA

디폴트가 사용됩니다 암시하는 변환을 제어 할 수있는 방법이 있습니까?

나는이 있다고 가정 해 봅시다 :

class String2(val x:String) {
    def *(times:Int) : String = {
        val builder = new StringBuilder()
        for( i <- 0 until times) {
            builder.append(x)
        }
        builder.toString()
    }
}

지금은이 암시를 추가하는 경우 :

implicit def gimmeString2(y:String) = new String2(y)

stringWrapper는이 암시를 추가하기 때문에 나는 컴파일 오류가 발생합니다. "이 사용하는 다른 implicits 무시"컴파일러에 말하는 방법이있다, 그래서 나는 그에서 문자열 2 객체와 작업을 인스턴스화 할 필요가 없습니다?

나는 예제 코드 (이 질문에 대한) 가장 적절하지 않을 수 있습니다 인정,하지만 난 그것을 할 것입니다 생각합니다.

해결법

  1. ==============================

    1.스칼라 2.8 implicits에 대한 우선 순위 시스템을 추가했다. 그것은 새로운 자바 배열에이 SIP에 설명 된 것 :

    스칼라 2.8 implicits에 대한 우선 순위 시스템을 추가했다. 그것은 새로운 자바 배열에이 SIP에 설명 된 것 :

    결론 그 대안이 동일한 인수 유형, 서브 클래스에 정의 된 일이있는 경우 승리합니다. 그래서 나는 다음과 같이 implicits를 선언 할 수 있다고 생각 :

    trait LowPriorityImplicits {
      //lower priority conversions
    }
    
    object HighPriorityImplicits extends LowPriorityImplicits {
      //higher-order ones here
    }
    
  2. from https://stackoverflow.com/questions/1886953/is-there-a-way-to-control-which-implicit-conversion-will-be-the-default-used by cc-by-sa and MIT license