1
Scala 컴파일러가 아래 오류 메시지와 관련하여 어떤 것을 설명 할 수 있습니까?암시 적 매개 변수 및 ClassTag
object Some {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
컴파일러는 말한다 :
not enough arguments for method apply: (implicit evidence$2: scala.reflect.ClassTag[T], implicit ordering: Ordering[T])T in object Some. Unspecified value parameter ordering.
내가 거기에 일부 내부 배열을 사용하기 위해, 객체 Some
의 방법에 ClassTag
을 추가 할 때 오류가 발생했다. 처음에는 코드이었다 (그리고 오류없이 컴파일) :
object Some {
def apply[T](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
내가 ClassTag
가 삭제를 극복 할 유형 정보와 암시 추가 알지만, 그건 내 주문 암시 적 매개 변수를 함께 할 수있다 이해하지 않거나 이유는 컴파일러가 갑자기 주문이 값이없는 생각 ...
그것은 매우 분명하지만 작은 실수를 가지고 : 당신은 암시 적
ClassTag
을 통해 수행 할implicitly
를 사용할 수 있습니다. 우리는 암시 적으로 하나 이상의 매개 변수가 있으므로 암시 적으로 [ClassTag [T]]를 사용해야하며 우리가 원하는 것을 식별해야합니다. – cloud@cloud 아니요, 매개 변수는 순서에 따라 구별됩니다. 첫 번째 매개 변수는 ClassTag [T]이고 두 번째 매개 변수는 Ordering [T]입니다. 형식 매개 변수를 유추 할 수 있기 때문에 간단한 '암시 적으로'충분합니다. – wingedsubmariner
젠장 타입 유추를 잊어 버렸습니다 ... 설명해 주셔서 감사합니다, 당신의 대답은 완벽합니다! – cloud