gpt4 book ai didi

scala - 从LabelledGeneric实例中提取标签值

转载 作者:行者123 更新时间:2023-12-03 13:31:16 24 4
gpt4 key购买 nike

考虑以下示例:

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


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

这可能吗?
我可以使用宏,但是我觉得最终我将以无形方式重写与 GenericMacros对象非常相似的内容,因此我想知道是否可以直接利用它。

最佳答案

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

这个

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)

关于scala - 从LabelledGeneric实例中提取标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27434302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com