从 LabelledGeneric 实例中提取标签值



请考虑以下示例:

import shapeless._
case class Foo(bar: String, baz: Boolean)
val labl = LabelledGeneric[Foo]

现在,labl的类型是(美化)

LabelledGeneric[Foo] {
  type Repr =
    FieldType[Symbol @@ String("bar"), String] ::
    FieldType[Symbol @@ String("baz"), Boolean] ::
    HNil
}

它已经传达了我需要的信息,即案例类字段的名称。

我正在寻找一种从labl到类似的东西的方法

"bar" :: "baz" :: HNil

即将单例类型中包含的信息具体化为一个值。

这可能吗?我可以使用宏,但我觉得我最终会重写与 shapeless 中的GenericMacros对象非常相似的东西,所以我想知道我是否可以直接利用它。

您可以通过 shapeless.ops.record.Keys 获取记录的键(如 Symbol s)。

import shapeless._
import shapeless.ops.record._
case class Foo(bar: String, baz: Boolean)
val labl = LabelledGeneric[Foo]
val keys = Keys[labl.Repr].apply
println(keys)
println(keys.toList.map(_.name))

结果在

'bar :: 'baz :: HNil
List(bar, baz) : List(String)

相关内容

  • 没有找到相关文章

最新更新