指定内部类参数与对象



我想在某处接受内部类类型的参数,但我不确定如何做到这一点,例如,

class Outer(...) {
  class Inner(...) { }
}
object Outer {...}
....
someFunc(arg : Outer.Inner) = {...}

但是 Scala 正在寻找对象 Outer 中的类型 Inner 而不是类 Outer。 所以我得到"类型 Inner 不是对象 Outer 的成员">

如果可能的话,我不想更改外部/内部的定义。

如果需要路径依赖类型,则必须要求提供类型为 Outer 的实例,以便也可以Inner类型引用该实例:

someFunc(outer: Outer)(inner: outer.Inner) = {...}

或者定义一个内部函数,其中范围内有一个Outer实例。

如果您只需要一个与Outer实例无关的 Inner 实例,那么您正在寻找类型投影:

someFunc(inner: Outer#Inner) = {...}

从您的问题中不太清楚您想要两者中的哪一个。

不知道你到底想实现什么:

您需要在作用域中具有外部类的实例才能访问内部类型的类型定义:

class Outer() {
  class Inner() { }
}
object Outer {
}
val o = new Outer()
def someFunc(arg : o.Inner) = {
}
someFunc(new o.Inner())

这是因为在 Scala 中,内部类绑定到外部对象而不是封闭类(见这里(

最新更新