问题:如何在 scala 或 Java 中实现以下模式?
trait A
case class B[Base](...) extends A with Base
这在 C++ 中是允许的:
template <class Base>
class B : public Base, public A
这就是我想要这样做的原因:
我有两个抽象语法树:ComplexForm
和 SimpleForm
我有一个列表类型:case class L[T](list : List[T]) extends Complex Form with T
现在,L[SimpleForm]
应该用 ComplexForm 扩展 SimpleForm
但是 L[ComplexForm]
应该只 extend ComplexForm
我需要能够一次对所有 L[T]
进行模式匹配,以避免重复。
最佳答案
也许是这样的?
trait Form
trait SimpleForm extends Form
trait ComplexForm extends Form
trait ListForm[+T <: Form] extends ComplexForm {
def l: List[T]
}
case class SimpleList(val l: List[SimpleForm]) extends SimpleForm with ListForm[SimpleForm]
case class ComplexList(val l: List[ComplexForm]) extends ListForm[ComplexForm]
你可以像这样对两者进行模式匹配:
// ...
case x:ListForm[Form] => doStuff(x.l)
关于java - 斯卡拉 : class[T] extends T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100317/