作者:霙昉蘖976 | 来源:互联网 | 2023-10-10 11:59
在 Scala 3 中summon
似乎和旧的implicitly
. 但是当我们深入研究实际例子时,我们发现情况并非如此。例如
case class A(i: Int, s: String)
val mirror = implicitly[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
产生错误
cannot reduce inline match with
scrutinee: compiletime.erasedValue[App.ValueOfs] : App.ValueOfs
patterns : case _:EmptyTuple
case _:*:[t @ _, ts @ _]
但是替换implicitly[Mirror.Of[A]]
为summon[Mirror.Of[A]]
编译很好。
在这种情况下和一般情况下summon
vs的微妙之处是什么implicitly
?