小编win*_*son的帖子

TypeTest 克服 scala3 中泛型类型的擦除问题

TypeTest我在理解scala3 中的 s 如何替代scala 2 中的 s 时遇到问题。TypeTag用例能够匹配像 x: List[Int] 这样的通用参数。

我试图解决的具体例子:

enum Foo :
  case Bar()
  case Baz()

case class Mod[T <: Foo](modFn: T => T)

def modifyBarsOrBaz(mod: Mod[_]) = mod match
  case barMod: Mod[Foo.Bar] => ???
  case bazMod: Mod[Foo.Baz] => ???
Run Code Online (Sandbox Code Playgroud)

编译器警告中的编译结果(如预期)

the type test for Mod[Foo.Bar] cannot be checked at runtime以及一个无法触及的案例。

现在我的问题是:这在 scala3 中可以做到吗?

我的印象是,我必须以某种方式TypeTest[Any, Mod[Foo.X]]为所有作为枚举子类的 X 提供一个Foo

但我什至很难实现这些测试,以及了解什么using参数modifyBarsOrBaz其工作所需的

因此我想出了以下(不起作用)解决方案:

def modifyBarsOrBaz[T <: Foo](mod: Mod[T])(using …
Run Code Online (Sandbox Code Playgroud)

reflection scala scala-3

3
推荐指数
1
解决办法
758
查看次数

标签 统计

reflection ×1

scala ×1

scala-3 ×1