gpt4 book ai didi

scala - Scala 类构造函数中的嵌套特征

转载 作者:行者123 更新时间:2023-12-04 11:44:46 24 4
gpt4 key购买 nike

我在玩 scala (scala 2.8)。假设我有一个带有嵌套特征的类,并且想使用该嵌套特征作为类构造函数中参数的类型。这甚至可能吗?这是我最近的一次:

class OuterClass(traitParam:OuterClass#InnerTrait) {
trait InnerTrait { }
val y:InnerTrait = traitParam
}

甚至没有编译的第三行,但是一旦我尝试实际使用 traitParam作为 InnerTrait我收到编译器错误:

type mismatch; found: OuterClass#InnerTrait required: OuterClass.this.InnerTrait.



我不知道我能做什么(如果有的话)。正在做
class OuterClass(traitParam:OuterClass.this.InnerTrait)

相反,正如错误消息可能暗示的那样,不会编译。除了搬家,我还有什么选择 InnerTrait OuterClass 之外?如果你想知道我为什么要这样做,答案是在我的实际代码中,相当于 OuterClass具有类型参数,然后将在 InnerTrait 中使用这些参数.如果我把它移到外面,那么我每次引用内部特征时都必须重新声明类型参数。

最佳答案

您遇到了 Scala 的路径依赖类型。您的 val y: InnerTrait的类型特定于它所包含的实例。 OuterClass#InnerTrait是所有 InnerTrait 的父类(super class)型现存于 OuterClass 的所有实例.

尝试使用此方法:

class OuterClass(traitParam: OuterClass#InnerTrait) {
trait InnerTrait { }

type IT = OuterClass#InnerTrait

def m1: IT = traitParam
}

关于scala - Scala 类构造函数中的嵌套特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632579/

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