421得票11回答
自类型和特质子类之间有什么区别?

一个用于特质A的自类型:trait B trait A { this: B => } 说的是:"A 不能被混合到没有扩展 B 的具体类中。" 另一方面,以下内容:trait B trait A extends B 它表明 "任何(具体或抽象)混合 A 的类也将混合 B"。 这两个语句不...

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

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

43得票6回答
特质继承和自身类型注释之间的区别

在Scala中,我看到了以下构造方式: trait T extends S 并且。 trait T { this: S => 这两者都可以实现类似的功能(即在创建实例之前必须定义S中的抽象方法)。它们的区别是什么?为什么要选择其中之一?

38得票2回答
明确的自我引用没有类型 / 与“this”有何区别

我理解显式类型的自引用的用途: trait T { self : T2 => ... } 在代码中,self 是 this 的别名,但它的类型更精确为 T with T2。 现在,我已经在代码中看到这个: trait T { self => ... } ...

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

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

19得票1回答
更符合Scala习惯的是什么:trait TraitA扩展TraitB还是trait TraitA { self: TraitB => }?

除了继承方面之外,下面这些类模板有什么区别:1| trait TraitA extends TraitB 2| trait TraitA { self: TraitB => } 我希望将职责分配给 TraitA 和 TraitB,但前者没有后者无法正常运行。 您如何表达这个意图? 对...

17得票1回答
Scala:非法继承;自身类型Y不符合X的自身类型SELF。

我有一个带有类型参数的特质(trait),我想表达实现了这个特质的对象也会符合这个类型参数(使用泛型为了兼容Java) 以下是代码:trait HandleOwner[SELF <: HandleOwner[SELF]] { self : SELF => // ... ...

14得票3回答
“=>”在自类型中的原因是什么?

自类型的示例如下:trait A { self: String => } 这意味着特征A(或其子类型)必须继承类String。 关键字self后面跟着:,类似于变量var s: String中类型在:后面的位置。 但是,在自类型中=>表示什么?这背后的原因是什么?

11得票1回答
如何区分组合和自我输入用例

Scala有两种表达对象组合的方法:原始的self-type概念和众所周知的简单组合。我想知道在哪些情况下应该使用哪个。 它们的适用性显然有所不同。Self-type要求您使用traits。对象组合允许您在运行时使用var声明更改扩展。 撇开技术细节不谈,我可以想出两个指标来帮助分类使用情...

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

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