指定内部类参数与对象

时间:2017-06-19 13:37:47

标签: scala

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

class Outer(...) {
  class Inner(...) { }
}

object Outer {...}

....

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

但是Scala正在寻找对象Outer中的类型Inner,而不是类Outer。所以我得到“类型内部不是对象外部的成员”

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

2 个答案:

答案 0 :(得分:4)

如果您需要path dependent type,则必须提供类型为Outer的实例,因此您也可以引用该实例Inner类型:

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

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

如果您只想要一个与Inner实例无关的Outer实例,那么您正在寻找type projection

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

从你的问题中可以清楚地看出你想要哪两个。

答案 1 :(得分:0)

不知道你想要达到的目标:

您需要在范围内有一个Outer类的实例来访问Inner类型的类型定义:

class Outer() {
  class Inner() { }
}

object Outer {

}

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

}

someFunc(new o.Inner())

这是因为在Scala内部类绑定到外部对象而不是封闭类(see here