kullanma tip etiketleri, ben açabiliyorum:Scala 2.10'da yansıma yoluyla tip parametrelerini bulma? <em>bir tür</em> parametrelerini görmek için
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> typeOf[List[Int]]
res0: reflect.runtime.universe.Type = List[Int]
Ama sadece oldukça programlı nasıl bilemiyorum oradan, bir de "Int" diye genel yol
(Ben bir saatliğine REPL içinde dolaşıyorum, ondan ne elde edebileceğimi görmek için, Yazım'daki permütasyonları deniyorum ... Bunun bir "Liste" olduğunu belirten pek çok şey var, ama Bu "Int" bulma konusunda iyi şanslar! Ve gerçekten toString() çıktısını ayrıştırmak için başvurmak istemiyorum ...)
Daniel Sobral, (her zamanki gibi) mükemmel bir genel bakışa sahip here Eğer biliyor sadece aradığım fakat ediyorum ne tantalizingly yakın (görünüşte), söz konusu sınıf için, türü bazı özel yöntem sorguya olabilir:
scala> res0.member(newTermName("head"))
res1: reflect.runtime.universe.Symbol = method head
scala> res1.typeSignatureIn(res0)
res2: reflect.runtime.universe.Type = => Int
Ama daha genel bir şey umuyoruz, ki bu da beyan edilen yöntemlerin listesinde köklenme içermiyor ve bunlardan birinin etiketin mevcut tip bilgisini bir yerlerde yakalayacağını (ve böylelikle) umuyor olmasını umuyorum.
Scala çok kolay bir şekilde yazdırıyorsa "Liste [Int]", niçin yeryüzünde bu "Int" parçasını bulmak çok zor - string desen eşlemesine başvurmadan? Yoksa gerçekten çok açık bir şey mi özlüyorum?
scala> res0.typeSymbol.asInstanceOf[ClassSymbol].typeParams
res12: List[reflect.runtime.universe.Symbol] = List(type A)
scala> res12.head.typeSignatureIn(res0)
res13: reflect.runtime.universe.Type =
Grr ... Ne yazık ki
Bkz olmayan bir cevap var: M7 en azından bir iç döküm yoluyla tip argümanları alabilirsiniz ile API: 'typeOf [Liste [Int]]. AsInstanceOf [scala.reflect.internal.Types $ TypeApiImpl] .typeArguments'. –
Zeki! Teşekkürler. – Tim