Бесформенные расширяемые записи с типом класса case в качестве ключей

scala shapeless traits

242 просмотра

1 ответ

Недавно я обнаружил Shapeless, и мне интересно, можно ли с ним сделать следующее. Допустим, у меня есть запечатанная черта и тематические классы:

sealed trait T

case class C1() extends T
case class C2() extends T

Я определил расширяемые записи этой формы:

val myRecords = (C1 ->> SomeObj1) :: (C2 ->> SomeObj2) :: HNil

Однако, если у меня есть val x = C1(), как я могу SomeObj1выйти myRecords?

Я не хочу здесь сопоставлять с образцом, и я хочу сохранить информацию о типе SomeObj1и SomeObj2.

Другой вопрос, как я могу заставить людей расширять свой trait Tкласс с другим делом, чтобы добавить соответствующую запись myRecords.

Автор: hosyvietanh Источник Размещён: 08.11.2019 10:59

Ответы (1)


0 плюса

Вы просто используете applyметод, который предопределен myRecords.

import shapeless._ ; import syntax.singleton._ ; import record._

val x: C1 = ...
val myRecords = (x ->> SomeObj1) :: (C2 ->> SomeObj2) :: HNil
val pair = myRecords(x)
Автор: flavian Размещён: 20.08.2016 11:22
Вопросы из категории :
32x32