很可能我不想做的事情,但希望类似的东西是可能的。
我想要做的是在类A
中的方法中使用匹配大小写语句,创建子类B
并保留所有未被我的子类覆盖的情况,所以在子类中的最后case _
之前,尝试了超类A
的所有情况。
AFAIK这远非可能(但如果错误请纠正我),但类似的东西并不是那么可能。
可能的选择是在超类中创建案例和函数的映射,并在每个子类中扩展该映射。这些案例应该是[T1] => Bool
类型,函数应该是[T1] => [T2]
类型,其中T2
是我们在子类中扩展的方法的返回类型。然后应该运行一个循环,直到一个case返回true并执行其函数。
问题在于我不确定如何定义这些案例([T1] => Bool
)。对它们中的每一个进行匹配可能效率非常低。这也可能是非惯用的,其他一些实现方法可能更为可取。
答案 0 :(得分:4)
在B
上super
调用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
}