加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:10:43 所属栏目:安全 来源:网络整理
导读:请考虑以下示例: 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
请考虑以下示例:

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对象非常相似的东西,所以我想知道是否可以直接利用它.

解决方法

您可以通过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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读