在Scala3编译时提取和访问字段

在这个博客中已经很好地解释了在 Scala 3 编译时提取案例类的元素的名称和类型:https : //blog.philipp-martini.de/blog/magic-mirror-scala3/
但是,同一个博客用于productElement获取存储在实例中的值。我的问题是如何直接访问它们?考虑以下代码:

case class Abc(name: String, age: Int)
inline def printElems[A](inline value: A)(using m: Mirror.Of[A]): Unit = ???
val abc = Abc("my-name", 99)
printElems(abc)

如何(更新和的签名printElems)实现,printElems以便printElems(abc)将其扩展为如下所示:

println(abc.name)
println(abc.age)

或者至少这个:

println(abc._1())
println(abc._2())

不是这个:

println(abc.productElement(0))
println(abc.productElement(1))

不用说,我正在寻找一种适用于任意 case 类的解决方案,而不仅仅是Abc. 此外,如果必须使用宏,那就没问题了。但请只使用 Scala 3。

以上是在Scala3编译时提取和访问字段的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>