이 코드는 컴파일에 실패하지만 표시된 줄의 주석을 제거 할 때 성공적으로 컴파일되는 이유는 무엇입니까? (나는 스칼라 2.8을 매일 사용하고있다.) 명시 적으로 string2Wrapper
을 호출하면 해당 지점에서 암시 적으로 사용될 수 있습니다.이 스칼라 메서드를 명시 적으로 호출하면 암시 적으로 해결 될 수 있습니까?
class A {
import Implicits.string2Wrapper
def foo() {
//string2Wrapper("A") ==> "B" // <-- uncomment
}
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
편집는 : 마틴 오더 스키의 의견에 대한 포인터를 포함 지금까지 답변에 대한 감사,
"명시 적 결과 유형이없는 암시 적 변환은 다음과 같은 텍스트 에서 볼 수의 그렇게하면 순환 참조 오류는 피할 수 있습니다. "
"순환 참조 오류"의 위험은 무엇입니까? 2) 명시 적 호출이 어떤 차이를 만드는 이유는 무엇입니까?
(예정)입니다. Paulp는 최근까지 그런 범위까지 티켓을 발굴했습니다. 내가 그것을 찾을 수없는 경우에 보자 ... –
여기 : https://lampsvn.epfl.ch/trac/scala/ticket/801 –