Scala:仅使用指定的路径相关类型参数调用函数

时间:2014-03-20 14:35:26

标签: scala path-dependent-type

让我们有一个带有内部类的A类。

class A {
    class InnerA
}

包含A

实例的类Test
class Test(inst: A) {
    def someFun(p: inst.InnerA) {} //Neither A#InnerA, Nor inst.type#InnerA
}

现在我需要限制someFun只能使用指定inst的InnerA类型的参数(Test成员)来调用。 (不是通过A#InnerA实现的任何InnerA实例)

val a: A = new A
val inna: a.InnerA = new a.InnerA
val test: Test = new Test(a)

但是当我写这段代码时:

test.someFun(inna)

类型检查器警告“类型不匹配,预期:inst.type#InnerA,actual:a.InnerA”

请建议如何完成。


类似但不合适解决方案的形式为

def fun(a: A)(p: a.InnerA) {}

至于应用程序:A类是Enumeration类,InnerA是Enumeration.Value类。而Test是一个我想限制只使用指定的Enumeration的类。 “inna”是在Enumeration子类中构造的枚举值的实例。

1 个答案:

答案 0 :(得分:1)

使用new Test(a),您将丢失a变为test.inst的信息。例如,以下工作:

class Test(val inst: A) {
  def someFun(p: inst.InnerA) = ()
}

val test: Test = new Test(new A)
val inna = new test.inst.InnerA
test.someFun(inna)