Bir Array döndüren bir işlev tanımlamak istiyorum ve bir TypeTag var. Gerekli ClassTag'ı oluşturabilir miyim?Scala 2.10'da, bir TypeTag verilen bir ClassTag nasıl oluşturulur
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> def fun[X: TypeTag]: Array[X] = Array.ofDim[X](10)
<console>:11: error: No ClassTag available for X
def fun[X: TypeTag]: Array[X] = Array.ofDim[X](10)
Ya da gerekli ClassTag örtülü kanıt sağlamaktır:
scala> import reflect.ClassTag
import reflect.ClassTag
scala> def fun[X: ClassTag: TypeTag]: Array[X] = Array.ofDim[X](10)(implicitly[ClassTag[X]])
fun: [X](implicit evidence$1: scala.reflect.ClassTag[X], implicit evidence$2: reflect.runtime.universe.TypeTag[X])Array[X]
Ben basit bir TypeTag bir ClassTag oluşturmak için sanırdım, ama belirgin bir şekilde görmek. Eğer gerçekten ilk etapta bir TypeTag
geçmesi gerektiğini olsa
def fun[X:TypeTag]: Array[X] = {
val mirror = runtimeMirror(getClass.getClassLoader)
implicit val xClassTag = ClassTag[X](mirror.runtimeClass(typeTag[X].tpe))
Array.ofDim[X](10)
}
emin olmak istersiniz:
Olası kopyası [ClassTag formu TypeTag veya her ikisi de aynı anda nasıl alınır?] (Http://stackoverflow.com/questions/18729321/how-to-get-classtag-form-typetag-or-both- at-same-time) – Suma