我正在阅读 Scala之旅:抽象类型。何时更适合使用抽象类型? 例如, abstract class Buffer { type T val element: T } 相比于泛型,例如, abstract class Buffer[T] { val element: T ...
在其他问题中我没有找到答案。假设我有一个抽象超类 Abstract0 和两个子类 Concrete1 和 Concrete1。我想要在 Abstract0 中定义如下内容: def setOption(...): Self = {...} 其中Self将是具体的子类型。这将允许像这样链接...
我需要一种方法来强制一个抽象类中的方法具有返回调用它的对象的具体类的返回类型。最常见的例子是copy()方法,我目前正在使用基于抽象类型的方法: abstract class A(id: Int) { type Self <: A def copy(newId: Int): S...
有两种可能的方式来表示类型抽象。 abstract class Buffer { type T val element: T } 与其使用泛型,例如: abstract class Buffer[T] { val element: T } 我理解在不同情境下使用不同方法...
我希望使用抽象类型而不是类型参数。 在我的泛型类构造函数中,我想要一个泛型类型的参数,但代码无法编译: class SomeOtherClass(val s: S){ type S } Scala编译器错误信息提示:“not found: type S”。 如果我使用类型参数...
我在尝试理解Scala中的抽象和显式自类型。让我们考虑这个例子:我想创建一个可扩展树的基础,如下所示: trait Tree { def children: Iterable[Tree] def descendants: Iterable[Tree] = { val dv = chi...
我正在尝试使用之前的问题的答案来实现一个小型图形库。想法是将图形视为集合,其中顶点包装集合元素。 我希望使用抽象类型来表示顶点和边缘类型(因为需要类型安全),并且我想使用类型参数来表示集合元素的类型(因为我希望在实例化时轻松定义它们)。 但是,当我尝试最基本的示例时,我遇到了编译错误。以下...
在思考另一个问题时,我遇到了一些看起来相关的谜题。这是其中之一: trait Sys[S <: Sys[S]] { type Peer <: Sys[Peer] } trait Fenced { type Peer <: Sys[Peer] } def make...
给定以下代码: class A { class B type C <: B trait D } class E extends A { type C = B } class F extends E { override type C = B wit...