IT박스

Scala 제네릭 메서드-T에 사용할 수있는 ClassTag 없음

itboxs 2020. 12. 9. 07:58
반응형

Scala 제네릭 메서드-T에 사용할 수있는 ClassTag 없음


저는 Scala에 비교적 익숙하지 않고 일반 개체 메서드를 정의하려고합니다. 그러나 메소드 내에서 매개 변수화 된 유형을 참조하면 "T에 사용할 수있는 ClassTag 없음"이 표시됩니다. 다음은 문제를 설명하는 인위적인 예입니다.

scala> def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
<console>:7: error: No ClassTag available for T
       def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
                                                                        ^

여기에서 무엇이 잘못되었는지 이해하고이 인위적인 예제를 작동시키는 방법에 대해 미리 감사드립니다.


일반 컨텍스트에서 배열을 인스턴스화하려면 ( T여기서 T유형 매개 변수 인 배열 인스턴스화 ) Scala는 런타임에에 대한 정보를 T유형의 암시 적 값 형식으로 가져야 합니다 ClassTag[T]. 구체적으로이 ClassTag을 (암시 적으로) 전달하려면 메서드 호출자가 필요합니다 . 이는 컨텍스트 바인딩을 사용하여 편리하게 수행 할 수 있습니다 .

def foo[T:ClassTag](count: Int, value: T): Array[T] = Array.fill[T](count)(value)

이 상황에 대한 (철저한) 설명은 다음 문서를 참조하십시오.

http://docs.scala-lang.org/sips/completed/scala-2-8-arrays.html

(짧게 말하면 ClassTags는 ClassManifests의 재 작업 된 구현이므로 근거는 남아 있습니다)

참고 URL : https://stackoverflow.com/questions/16921168/scala-generic-method-no-classtag-available-for-t

반응형