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

标签 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
}

现在我需要限制仅使用指定 inst 的 InnerA 类型的参数调用 someFun(测试成员)。 (不是通过 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,实际:a.InnerA”

请建议如何做到这一点。


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

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

应用方面:A类是Enumeration类,InnerA是Enumeration.Value类。 Test 是我想限制只与指定的枚举一起使用的类。 “inna”是在枚举子类中构造的枚举值的实例。

最佳答案

使用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)

关于Scala:仅使用指定的路径相关类型参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536202/

相关文章:

scala - 如何将函数编写为二元运算符?

perl - 如果你有 Traits,你会停止使用接口(interface)、抽象基类和多重继承吗?

scala - 路径依赖类型和依赖类型有什么区别?

regex - scala 在捕获组上拆分

scala - 如何使用Spark从HDFS读取数据?

scala - 如何避免使用路径依赖类型的可怕类型转换?

scala - 类型与类型投影不匹配

scala - 如何使用包含依赖类型的隐式参数组对该方法进行编码?

android - 如何在 Android-Scala 应用程序中扩展 ImageView?

scala - 类标签和路径相关的类型,具有蛋糕图案的味道