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)