1
def getManifest[T : Manifest] = implicitly[Manifest[T]]
class A[T]
object A {
def apply[T] = new A[T]
}
def getA[T : A] = implicitly[A[T]]
val m = getManifest[Int]
//res0: Manifest[Int] = Int
val a = getA[Int]
//<console>:14: error: could not find implicit value for evidence parameter of type A[Int]
스칼라에서 어떻게 매니페스트가 컨텍스트에서 암시 적으로 기능 할 수 있습니까?
상황
에서 암시 적 변수가getManifest[Int]
를 호출하여이 없다하더라도, 유형
Manifest[Int]
의
m
암시 caputred됩니다
는
그러나 내 사용자 정의 클래스 A는 getA[Int]
오류가 방출
cotext에 암시 적 변수가 없으므로.
무엇 클래스 A와 매니페스트
의 차이는 스칼라 컴파일러에 대한 매니페스트가 알고 않습니다이며 마법을 ???
은 매니페스트에 대한 암시 적 변수를 만듭니다.
감사합니다. 귀하의 답변은 매우 유용합니다. 내 맞춤 클래스 A를 Manifest처럼 작동시킬 수 있습니까? –
일부 용도는'TypeTag's로, 다른 것은'ClassTag's로 대체해야합니다. –
@WonpyoPark, 아니요, 암시 적 변환이 가능할지라도 원하는대로 얻을 수 있습니다. 특히 컴파일러에게 어떤 타입의'T '로부터'A'를 얻는 방법을 알려줄 필요가 있으며, 그것을하는 한가지 방법은 암시적인 변환을 통해서입니다. – badcook