gpt4 book ai didi

Scala:扩展内部类,不引用外部类

转载 作者:行者123 更新时间:2023-12-04 22:34:23 24 4
gpt4 key购买 nike

我可以在外部类内部或从外部类派生的类内部扩展内部类/特征。我可以扩展外部类的特定实例的内部类,如下所示:

class Outer
{
class Inner{}
}

class OtherCl(val outer1: Outer)
{
class InnA extends outer1.Inner{}
}

注意:即使这似乎编译得很好,产生了非常有趣的可能性:
trait OuterA
{ trait InnerA }

trait OuterB
{ trait InnerB }

class class2(val outerA1: OuterA, val outerB1: OuterB)
{ class Inner2 extends outerA1.InnerA with outerB1.InnerB }

但这不会编译:
class OtherCl extends Outer#Inner

据我所知,我正在尝试扩展一个参数化类,其中类型参数是外部类的一个实例,因此会影响
class OtherCl[T where T is instance of Outer] extends T.Inner

那么,无论如何要在不引用外部特征/类的情况下扩展外部特征/类内的内部类/特征?

我不想在没有外部类实例的情况下实例化派生内部类,只声明其类型。

最佳答案

您可以使用带有 self-type 的 trait 来做类似的事情。例如,假设我们有以下内容:

class Outer(val x: Int) {
class Inner {
def y = x
}
}

并且我们想在没有 Inner 的情况下向 Outer 添加一些功能:
trait MyInner { this: Outer#Inner =>
def myDoubledY = this.y * 2
}

现在,当我们实例化 Inner 时,我们可以混合 MyInner :
scala> val o = new Outer(21)
o: Outer = Outer@72ee303f

scala> val i = new o.Inner with MyInner
i: o.Inner with MyInner = $anon$1@2c7e9758

scala> i.myDoubledY
res0: Int = 42

这不完全是你想要的,但很接近。

关于Scala:扩展内部类,不引用外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com