0

很可能我想做的事情无法完成,但希望类似的事情是可能的。

我想做的是在一个类的方法中有一个 match-case 语句A,创建一个子类B并保留所有未被我的子类覆盖的案例,以便case _在子类的 final 之前所有超类的案例A被尝试。

AFAIK 这远非可行(但如果有错请纠正我),但类似的事情也不是那么遥远。

一个可能的选择是在超类中拥有一个案例和函数的映射,并在每个子类中扩展该映射。案例应该是 type [T1] => Bool,函数应该是 type [T1] => [T2],其中T2是我们在子类中扩展的方法的返回类型。然后应该运行一个循环,直到一个 case 返回 true 并执行它的函数。

问题是我不确定如何定义这些情况([T1] => Bool)。对它们中的每一个进行匹配可能是非常低效的。这也可能是非常不惯用的,并且实现这一点的其他一些方式可能是可取的。

4

2 回答 2

4

B调用方法有什么super问题case _

于 2013-09-10T17:14:07.433 回答
2

虽然不是一个案例陈述,但您可以通过将逻辑建模为部分函数并将它们与“orElse”链接在一起来实现类似的效果

class A{
  def f={case foo:Foo => //do something
         case bar:Bar => //do something else}

}

class B extends B{
  override def f = {case bar:Bar=> //do something still different
                   } orElse super.f
}
于 2013-09-10T18:32:48.493 回答