için objektif tanımlamak trait A
tüm çocuklar için lens tanımlamak mümkün mü?Biçimsizler sonraki kod</p> <pre><code>trait A { val id: Int } case class B(id: Int) extends A case class C(id: Int, name: String) extends A </code></pre> <p>i tüm sınıf hiyerarşisi için ortak objektif tanımlamak istediğiniz sahip baz özelliği
10
A
cevap
2
shapeless, A
'dan Record
'a örtük bir dönüşüm sağlamaz. Karşılık gelen bir kayıt türü dönüşümünü sağlamak için LabelledGeneric[A]
tanımlayabilir:
import shapeless._
import lens._
import record._
import syntax.singleton._
trait A { val id: Int }
case class B(id: Int) extends A
case class C(id: Int, name: String) extends A
implicit val lgenA = new LabelledGeneric[A] {
type Repr = Record.`'id -> Int`.T
def to(a: A) : Repr = ('id ->> a.id) :: HNil
def from(r: Repr): A = new A { val id = r('id) }
}
val idLens = lens[A] >> 'id
val b = B(7)
println(idLens.get(b)) // 7
+0
Vay, çok teşekkürler! – lito
İlgili konular
- 1. Java i 2 farklı sınıflar</p> <pre><code>public class A { String name; int A1; int A2; } </code></pre> <p>ve diğer sınıf
- 2. Bu haskell sözdizimi nedir?</p> <pre><code>data A = A Int Int | B m :: A -> Int m a = case a of A{} -> 1 _ -> 2 </code></pre> <p>burada ne <code>A{}</code> nedir -
- 3. IEnumerable <int>
- 4. convert IQueryable <int> to <int>
- 5. Sözlüklüğe ekle <int, List <int>>
- 6. Marshal a java.util.Map <String, Dize>
- 7. İkili Karşılaştır <int>
- 8. Scala öğeleri toplayan bir fonksiyon nasıl tanımlanacağı rağmen</p> <pre><code>a.collect { case v: Int => v } res: Array[Int] = Array(1, 2) </code></pre> <p>,
- 9. <a> etiketi
- 10. C++ 11 agrega başlatma:</p> <pre><code>struct A { int a = 3; int b = 3; }; A a{0,1}; // ??? </code></pre> <p>bu sınıf hala toplamak mı? <code>clang</code> bu kodu kabul eder, ancak <code>gcc</code> yapamaz.
- 11. Python nasıl</p> <pre><code>['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a'] </code></pre> <p>teşekkür ederiz yazdırmak için ben alırım bütün desenleri
- 12. java: HashMap <String, int> çalışmıyor
- 13. 'Async <string []>' türü 'seq <'a>'
- 14. Öğe <int> IEnumerable için <IComparable>
- 15. listesini <int> dönüştürme []
- 16. Android: Ben</p> <pre><code>int a=(-2)%6 </code></pre> <p>çalışırsanız
- 17. 'System.Linq.IQueryable <int>' türünü 'int' türüne dönüştüremiyor
- 18. Neden Array.newInstance (Sınıf <?>, int) jenerik değil mi?
- 19. QList <int> için QSettings'i Kaydet
- 20. Değeri değiştir Bu sınıf örneğinde Sonra</p> <pre><code>class A { String a; } </code></pre> <p>enjekte etmek google Guice kullanarak
- 21. <a href.. in PHP
- 22. `void f (A <I>, tuple <T *...>)` dan daha özel değil (A <0>, tuple <T *...>) `` dır?
- 23. Nasıl IEnumerable <int> dönüştürebilirsiniz Int32
- 24. Std :: atomic için ++ atomik <int>
- 25. Liste <int> Nhibernate Criteria
- 26. CSS - Neden <a href> elements?
- 27. artış haritası <string, int> ++ kullanıcı aracını kullanarak
- 28. vector <int> :: size_type C++ içinde
- 29. - değil <a href>
- 30. SFINAE: Derleyici Bir <a href="http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error" rel="noreferrer">SFINAE</a> sorun var
Bir kapalı MkFieldLens [A, K] sağlamak gerekir. Sorun K'yi nasıl tanımlayacağımı bilmiyorum (Symbol with shapeless.tag.Tagged [String ("id")]). Bunu kim çözdü? –