Her sınıftaki örnek sınıflarını, toplama değerlerini işlemek ve sonra da kitaplığa iletmek için genel kod yazıyor. LabelledGeneric
şekilsiz ve polimorfik fonksiyonlarını kullanmaShapeless nasıl numaralandırılır Çalışma zamanında alan anahtarlarına kayıt olun ve erişin?
, bu şuna benzer:
object toNamedSingletonListOfValues extends Poly1 {
implicit def caseField[K,T] =
at[FieldType[K, T]](field => { field.key -> List[T](field) })
}
val generic = LabelledGeneric[MyClass]
val records = listOfMyClassInstances.map(generic.to)
val values = records.map(_.map(toNamedSingletonListOfValues)) // Then combining and passing
Ancak, kütüphane parametre adları gerektiğinden field.key
almanın bir yolunu bulmalıyız.
Çözüm önerisini önerir misiniz?
import scala.reflect.runtime.universe._
object toNamedSingletonListOfValues extends Poly1 {
implicit def caseField[K: TypeTag, T] = at[FieldType[K, T]] { field =>
(typeOf[K] match { case TypeRef(_, _, args) => args }).last.toString.drop("java.lang.String(\"".size).dropRight(2) -> List[T]()
}
}
güzel bir çözüm etrafında var mı:
Teşekkür ederiz! Şimdi tekrar yazmak için bazı şeylerim var, ama aslında benim için ilerleme sağladı. BTW, Aux'leri kullanmaya çalışıyordum, ancak, hangi nesneyi kullanmam gerektiğinden Aux'i anlayamadım. Aux'es için hiçbir belge yok ve bu bilgiyi tüm şekilsiz kaynak kod dosyalarına dağılmış olarak, bu bilgiyi şekilsiz kaynak kodundan çıkarmak neredeyse imkansız. –
'Aux' türlerinin tümü, belirli bir tür sınıfıyla eşleştirilir ve bir tür üyesini bir tür parametresine yükseltmek için tasarlanmıştır. Bunu "wk: Witness {type T = K}" ile yazabilirsin, ama "Aux" versiyonu daha güzel. –