我想在某处接受内部类型的参数,但我不知道如何做到这一点,例如,
class Outer(...) {
class Inner(...) { }
}
object Outer {...}
....
someFunc(arg : Outer.Inner) = {...}
但是Scala正在寻找对象Outer中的类型Inner,而不是类Outer。所以我得到“类型内部不是对象外部的成员”
如果可能的话,我不想改变外/内的定义。
答案 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)