2012-12-11 14 views
9

Biri, Manifest'teki bu kabul edilmeyen tip tanığın yerine 2.10 numaralı scalada ne yapmam gerektiğini işaret edebilir mi?Kullanımdan kaldırılan <: <Manifest tipi tanık Scala 2.10

reflect.ClassManifest.singleType(foo) <:< barManifest 

Doğrusu, burada amacım bir kullanımdan kaldırılması uyarı yükseltmek değil şey ile değiştirmek olmaya yöneliktir. Yeni yansıma API'sini kullanmaktan mutluluk duyuyorum. önemlidir varsa burada

, bağlamda söz konusu kod:

https://github.com/azavea/geotrellis/blob/master/src/main/scala/geotrellis/feature/op/geometry/geometry.scala#L45

cevap

10

etiketleri yazmak için manifestolarına gelen oldukça edebi çeviri istiyorsanız, kullanmak, uygun aynayı almak gerekir örneğini yansıtmak ve Type üzerinde <:< kullanın. Şimdi

import scala.reflect.runtime.currentMirror 
import scala.reflect.runtime.universe._ 

sealed trait X 
case class Y(i: Int) extends X 
case class Z(j: String) extends X 

def filterX[A <: X: TypeTag](xs: List[X]) = xs.filter(
    x => currentMirror.reflect(x).symbol.toType <:< typeOf[A] 
) 

Ve: Örneğin:

scala> filterX[Z](List(Y(1), Y(2), Z("test"))) 
res1: List[X] = List(Z(test)) 

scala> filterX[Y](List(Y(1), Y(2), Z("test"))) 
res2: List[X] = List(Y(1), Y(2)) 

Orada uygulamanızda daha tam yeni Yansıma API yararlanmak yollar olabilir, ama bu çalışması gerekir ve kullanımdan kaldırma ilgilenir uyarılar.

+0

Çok faydalı yanıt! Ama aslında bunu projemde denediğimde, aşağıdaki çalışma zamanı hatasını alıyorum: LineString sınıfını içeren yasadışı döngüsel başvuru (scala.reflect.internal.Symbols $ TypeSymbol.tpe (Symbols.scala: 2710)) Tabii ki, bu muhtemelen Söz konusu belirli sınıflarla ilgili. –

İlgili konular