5
Belirli bir singleton sınıfının bir özelliği uygulayıp uygulamadığını kontrol etmek için aşağıdaki işlevi yazdım. AncakParametre verilen türlerde Scala yansıması
trait A
object B extends A
assert(maybeMakeSingletonObj[A](B.getClass()) === Some(B))
Aşağıdaki örnekte üzerinde başarısız:
/** Given a singleton class, returns singleton object if cls implements T.
* Else returns None. */
def maybeMakeSingletonObj[T: ClassManifest](cls: Class[_]): Option[T] = {
try {
val m = classManifest[T]
val obj = cls.getField("MODULE$").get(m.erasure).asInstanceOf[AnyRef]
if (Manifest.singleType(obj) <:< m) Some(obj.asInstanceOf[T])
else None
} catch {
case e: Exception => None
}
}
Bu kod aşağıdaki örnekte üzerinde çalışıyor
trait A[T, R]
object B extends A[Int, Int]
assert(maybeMakeSingletonObj[A[_,_]](B.getClass()) === Some(B))
Herhangi bir fikir? "Tip-ilişkisi operatörleri <: < ve =:. Henüz yeterince manifestolarına temsil edilmeyen tip uygunluk sayısız yönleri olduğu gibi = sadece tahminidir düşünülmelidir" ScalaDoc itibaren
Bu hatayı açıklarsanız veya en azından kendi kendine yeten kodlar içeriyor olsanız yardımcı olur. –
Kod bağımsızdır. Başarısızlık, basitçe, belki deMakeSingletonObj'nin ikinci durumda bazı (B) döndürmemesidir. Açık kontrol, ilk durumda olduğu gibi çalışmıyor. Ayrıca, geri gönderilen bir Özel Durum nedeniyle değil, ancak açık çek nedeniyle. –
Acaba bunun nedeni siliniyor mu? Benim anlayışım, parametrelendirmelerin derlemeden kurtulmalarının gerekmediği - yani yansıma ile onları görmek mümkün değil. Yine de yanlış olabilir. – Owen