展开子类中的案例列表

时间:2013-09-10 15:44:33

标签: scala

很可能我不想做的事情,但希望类似的东西是可能的。

我想要做的是在类A中的方法中使用匹配大小写语句,创建子类B并保留所有未被我的子类覆盖的情况,所以在子类中的最后case _之前,尝试了超类A的所有情况。

AFAIK这远非可能(但如果错误请纠正我),但类似的东西并不是那么可能。

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

问题在于我不确定如何定义这些案例([T1] => Bool)。对它们中的每一个进行匹配可能效率非常低。这也可能是非惯用的,其他一些实现方法可能更为可取。

2 个答案:

答案 0 :(得分:4)

Bsuper调用case _时使用该方法有什么问题?

答案 1 :(得分: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
}