273得票5回答
Scala:抽象类型 vs 泛型

我正在阅读 Scala之旅:抽象类型。何时更适合使用抽象类型? 例如, abstract class Buffer { type T val element: T } 相比于泛型,例如, abstract class Buffer[T] { val element: T ...

46得票2回答
如何使用Scala的this类型、抽象类型等来实现自身类型?

在其他问题中我没有找到答案。假设我有一个抽象超类 Abstract0 和两个子类 Concrete1 和 Concrete1。我想要在 Abstract0 中定义如下内容: def setOption(...): Self = {...} 其中Self将是具体的子类型。这将允许像这样链接...

36得票4回答
Scala:实现返回具体实例类型的方法

我需要一种方法来强制一个抽象类中的方法具有返回调用它的对象的具体类的返回类型。最常见的例子是copy()方法,我目前正在使用基于抽象类型的方法: abstract class A(id: Int) { type Self <: A def copy(newId: Int): S...

21得票1回答
抽象类型与类型参数

在什么情况下应该优先使用抽象类型而不是类型参数?

15得票3回答
Scala的抽象类型有哪些用法是泛型无法实现的示例?

有两种可能的方式来表示类型抽象。 abstract class Buffer { type T val element: T } 与其使用泛型,例如: abstract class Buffer[T] { val element: T } 我理解在不同情境下使用不同方法...

10得票5回答
Scala类构造函数和抽象类型

我希望使用抽象类型而不是类型参数。 在我的泛型类构造函数中,我想要一个泛型类型的参数,但代码无法编译: class SomeOtherClass(val s: S){ type S } Scala编译器错误信息提示:“not found: type S”。 如果我使用类型参数...

9得票2回答
Scala集合中的self type和this.type问题。

我在尝试理解Scala中的抽象和显式自类型。让我们考虑这个例子:我想创建一个可扩展树的基础,如下所示: trait Tree { def children: Iterable[Tree] def descendants: Iterable[Tree] = { val dv = chi...

9得票2回答
在Scala中混合使用类型参数和抽象类型

我正在尝试使用之前的问题的答案来实现一个小型图形库。想法是将图形视为集合,其中顶点包装集合元素。 我希望使用抽象类型来表示顶点和边缘类型(因为需要类型安全),并且我想使用类型参数来表示集合元素的类型(因为我希望在实例化时轻松定义它们)。 但是,当我尝试最基本的示例时,我遇到了编译错误。以下...

8得票2回答
无法将表示类型作为类型成员实现

在思考另一个问题时,我遇到了一些看起来相关的谜题。这是其中之一: trait Sys[S <: Sys[S]] { type Peer <: Sys[Peer] } trait Fenced { type Peer <: Sys[Peer] } def make...

8得票1回答
为什么无法覆盖已经实现的抽象类型?

给定以下代码: 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...