scala - 从 Mirror 获取 MirroredElemLabels
问题描述
Scala 3scala.deriving.Mirror
有一个类型成员MirroredElemLabels
,它是字符串文字的元组。将该类型作为值的标准方法是什么?
编辑:这是尝试使用时产生编译器错误的代码summonAll
case class Test(a: Int, b: String)
val mirror = implicitly[Mirror.ProductOf[Test]]
val labels = summonAll[mirror.MirroredElemLabels]
println(labels)
cannot reduce inline match with
scrutinee: compiletime.erasedValue[App.mirror.MirroredElemLabels] : App.mirror.MirroredElemLabels
patterns : case _:EmptyTuple
case _:*:[t @ _, ts @ _]
解决方案
尝试使用scala.ValueOf
case class A(i: Int, s: String)
import scala.deriving.Mirror
import scala.compiletime.summonAll
val mirror = summon[Mirror.Of[A]]
type ValueOfs = Tuple.Map[mirror.MirroredElemLabels, ValueOf]
val valueOfs = summonAll[ValueOfs]
def values(t: Tuple): Tuple = t match
case (h: ValueOf[_]) *: t1 => h.value *: values(t1)
case EmptyTuple => EmptyTuple
values(valueOfs) // (i,s)
http://dotty.epfl.ch/docs/reference/contextual/derivation.html
推荐阅读
- ios - 快速解析推送通知数据
- java - 如何模拟结果元数据以进行junit测试
- reactjs - 使用 React将已插入的 \n 转换为
Draft-js - android - 在 NavigationDrawer 中的菜单资源文件之间切换
- java - 当 Spring Security 在 Spring Cloud Config Server 上处于活动状态时,Spring Cloud Config Client 未获取配置
- dask - 您可以在 dask 阵列上使用 dask_ml kmeans 吗?
- json - “maxContains”限制不适用于 JSON 模式
- php - 如何使用 Laravel 创建这种 URL /{storeId}/employee
- php - 没有发件人地址无法发送邮件 :: 通过 Gmail 发送电子邮件以重置密码
- r - 导出 R 中的峰值位置