scala.deriving.Mirror
в Scala 3 имеет член типа 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 @ _]
implicitly[Mirror.ProductOf[Test]]
правильно. НоsummonAll[mirror.MirroredElemLabels]
неверно. Это правдаimplicitly[mirror.MirroredElemLabels =:= ("i", "s")]
, но это не означает, что существует неявный типmirror.MirroredElemLabels
или имплицитные типы синглтонов"i"
,"s"
. Этот типmirror.MirroredElemLabels
является кортежем одноэлементных типов. И вы, вероятно, захотите найти кортеж значений, состоящий из значений этих одноэлементных типов. - person Dmytro Mitin   schedule 09.07.2021