Método genérico de Scala: no hay ClassTag disponible para T
generics scala-2.10 (1)
Para instanciar una matriz en un contexto genérico (instanciando una matriz de T
donde T
es un parámetro de tipo), Scala necesita tener información en tiempo de ejecución sobre T
, en la forma de un valor implícito de tipo ClassTag[T]
. Concretamente, necesita que el que llama de su método (implícitamente) apruebe este valor de ClassTag
, que se puede hacer de forma conveniente utilizando un contexto vinculado :
def foo[T:ClassTag](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
Para una descripción (completa) de esta situación, vea este documento:
http://docs.scala-lang.org/sips/completed/scala-2-8-arrays.html
(Para decirlo brevemente, ClassTags es la implementación reelaborada de ClassManifests, por lo que el razonamiento permanece)
Soy relativamente nuevo en Scala y estoy tratando de definir un método de objeto genérico. Sin embargo, cuando me refiero al tipo parametrizado dentro del método obtengo "No ClassTag disponible para T". Aquí hay un ejemplo artificial que ilustra el problema.
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)
^
Gracias de antemano por su ayuda para entender lo que está mal aquí y cómo hacer que este ejemplo artificial funcione.