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

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

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

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

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

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

7得票2回答
在Scala中,定义一个特质(trait),用来被case class继承。

我有一些case类,它们在其伴生对象中定义了一个名为tupled的方法。如下所示,在伴生对象中可以看到,这只是代码重复。 case class Book(id: Int, isbn: String, name: String) object Book { def tupled = (B...

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

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

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

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

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

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

7得票1回答
具有协变性的特质中的"return this"返回实际类型。

这个问题可能以前被问过了,但我遇到了这个问题: trait Container[+A] { def a: A def methodWithSideEffect() = { // perform some side effecting work this } } ...

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

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

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

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