隐含和召唤有什么区别?

在 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]]编译很好。

在这种情况下和一般情况下summonvs的微妙之处是什么implicitly

以上是隐含和召唤有什么区别?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>