self-type相关内容
我了解明确输入的自引用的用法: trait T {自我:T2 =>...} 在正文中,self 是this 的别名,但具有更精确的类型T with T2. 现在,我已经在代码中看到了这一点: trait T {自我=>...} 也就是说,一个没有附加类型信息的显式自引用.在这种配置中,是否存在 self 不仅仅是 this 的别名的情况? 解决方案 它是 this 的别名.
..
我在任何其他问题中都找不到答案.假设我有一个抽象超类 Abstract0,它有两个子类 Concrete1 和 Concrete1.我希望能够在 Abstract0 中定义类似 def setOption(...): Self = {...} 其中 Self 将是具体的子类型.这将允许像这样对 setOption 进行链接调用: val obj = new Concrete1.setOpti
..
特征的自类型A: 特性B特性 A { 这个:B =>} 说"A不能混合到一个不扩展B"的具体类中. 另一方面,以下内容: 特性B特质 A 延伸 B 说“A 中混合的任何(具体或抽象)类也将混合在 B 中". 这两个陈述不是一个意思吗?self 类型似乎只是为了创造一个简单的编译时错误的可能性. 我错过了什么? 解决方案 主要用于依赖注入,例如在蛋糕模式中.有一篇很
..
给定: 抽象类数据库[F[_]] 我怎样才能使这个特性起作用: //标记特征表明数据库插件支持StaticRolestrait StaticRoles { this: Databases[_] =>} 我想确保 StaticRoles 只混合在扩展 Databases 的类中,但是我不关心类型参数 的具体值>F. 代码返回: 错误:_$1 没有类型参数,预期:1 这是公平的,但它
..
abstract class Bar[M] { def print(t: M): Unit = { println(s"Bar: ${t.getClass()}") } } trait Foo[M] { this: Bar[M] => def print2(t: M): Unit = { println(s"Foo: ${t.getClass()}") } }
..
(试图通过探测边界来了解自身类型的使用.) 这不能实例化(D和String是类,但是必须混用其中之一.加上String是最终的.).但是还有其他用途吗? class D { foo: String => def f2 = foo.substring(1) } 更新:对不起,我似乎不善于提问. 我想知道的是这种奇怪的特殊情况是否有意义. D类永远无法实例化的情况
..
请考虑以下类别,我认为该类别正确称为自类型类: public abstract class Example> { /** Constructs an instance of the subclass */ protected abstract E construct(); /** Do a private operation in th
..
这是此问题的后续行动../p> 为什么此代码无法编译,我该如何解决? trait Vec[V] { self:V => def -(v:V):V def dot(v:V):Double def norm:Double = math.sqrt(this dot this) def dist(v:V):Double = (this - v).norm } 错误是:
..
abstract class A { protected[this] type ThisType = this.type protected[this] type OtherType = this.type def assign(other: OtherType): ThisType } class B extends A { def assign(other: OtherT
..
我正在尝试把自己的头放在scala中的抽象和显式自身类型上. 让我们考虑这个例子: 我想像这样简单地为可扩展树创建基础: trait Tree { def children: Iterable[Tree] def descendants: Iterable[Tree] = { val dv = children.view; dv ++ (dv.flatMap { _.children
..
我需要一种方法来强制抽象类中的方法具有其调用对象的 concrete 类的返回类型.最常见的示例是copy()方法,我目前正在使用基于抽象类型的方法: abstract class A(id: Int) { type Self
..
scala> class A defined class A scala> class B {this: A => } defined class B scala> new B :10: error: class B cannot be instantiated because it does not conform to its self-type B with A
..
我有一个特征,该特征带有一个类型参数,我想说实现此特征的对象也将符合该类型参数(使用泛型,以实现Java的兼容性) 以下代码: trait HandleOwner[SELF // ... def handle: Handle[SELF] } trait Common[SELF
..
这是此问题的后续操作./p> 我正在尝试使用自类型的通用超类在scala中实现向量: trait Vec[V] { self:V => def /(d:Double):Vec[V] def dot(v:V):Double def norm:Double = math.sqrt(this dot this) def normalize = self / norm }
..
在scala中,有没有办法将特征的自身类型定义为案例类,例如“任何案例类"?我希望自类型能够使用案例类的.copy方法,并强制其自身类型为 some 案例类,而不是常规类.我认为结构性类型无济于事,因为它们需要包含特定参数的签名(对于任何案例类,我可能一般都不能使用结构性类型). 请放弃“如果您需要做某些错误的事情",因为我已经讲过,但是我的api设计-如果可以的话,将会变得很笨拙.我也很好
..
在Scala中,我已经看到了结构 trait T extends S 和 trait T { this: S => 用于实现类似的目的(即,必须在创建实例之前定义S中的抽象方法).它们之间有什么区别?为什么您要在另一个上使用? 解决方案 我将使用自类型进行依赖项管理:此特征需要混入另一个特征.我将使用继承来完善另一个特征或界面. 仅作为示例: trait F
..
我了解明确键入自引用的用法: trait T { self : T2 => ... } 在主体中,self是this的别名,但具有更精确的类型T with T2. 现在,我已经在代码中看到了这一点: trait T { self => ... } 也就是说,没有其他类型信息的显式自我引用.在这种配置下,是否存在self不仅仅是this的别名的情况?
..
在其他任何问题中我都找不到答案.假设我有一个抽象超类Abstract0,它带有两个子类Concrete1和Concrete1.我希望能够在Abstract0中定义类似的内容 def setOption(...): Self = {...} 其中Self将是具体的子类型.这样可以将调用链接到setOption,如下所示: val obj = new Concrete1.setOpti
..
特质A的自类型: trait B trait A { this: B => } 说"A不能混入不扩展B" 的具体类中. 另一方面,以下内容: trait B trait A extends B 说“在A中混合的任何(具体或抽象的)类也将在B中混合". 这两个语句不是同一回事吗?自类型似乎仅用于创建简单的编译时错误. 我想念什么? 解决方案 主要用于依赖
..
除了继承方面,以下类模板之间是否存在差异: 1 |特质TraitA扩展TraitB 2 |特质TraitA {self:TraitB => } 我想在 TraitA 和 TraitB 但前者在没有后者的情况下无法运作。 您如何表达此意图? 对我而言,解决方案[2]将是更自然的方法。但是我不想把实施者的负担混合在一起需要混合的东西。 解决方案 我
..