在 asInstanceOf 中引用嵌套 class
Referring nested class in asInstanceOf
我得到 not found: value Duck
class Type
class Value(val t: Type)
class Duck extends Type {
class Val extends Value(this)
}
def f(individual: Value) = individual.t match {
// case t: Duck => individual.asInstanceOf[Value] //this is ok
case t: Duck => individual.asInstanceOf[Duck.Val] //but I need this
}
在此处添加一些细节以提高问题质量。正规的质检是不会错的。如果更多的字母改善了你的问题,那一定是这样。现在,我的问题好多了,可以发布了。
您可能正在寻找这个:
def f(individual: Value) = individual.t match {
case t: Duck => individual.asInstanceOf[t.Val]
}
或者这样:
def f(individual: Value) = individual.t match {
case t: Duck => individual.asInstanceOf[Duck#Val]
}
在 Scala 中,为外部 class 的每个 实例 定义了一个内部类型。所以你正在寻找的类型是 t.Val
,因为你必须提供外部 class 实例才能完全了解内部 class 类型。如果你想获得所有这些内部类型的超类型,你可以做 Outer#Inner
.
我得到 not found: value Duck
class Type
class Value(val t: Type)
class Duck extends Type {
class Val extends Value(this)
}
def f(individual: Value) = individual.t match {
// case t: Duck => individual.asInstanceOf[Value] //this is ok
case t: Duck => individual.asInstanceOf[Duck.Val] //but I need this
}
在此处添加一些细节以提高问题质量。正规的质检是不会错的。如果更多的字母改善了你的问题,那一定是这样。现在,我的问题好多了,可以发布了。
您可能正在寻找这个:
def f(individual: Value) = individual.t match {
case t: Duck => individual.asInstanceOf[t.Val]
}
或者这样:
def f(individual: Value) = individual.t match {
case t: Duck => individual.asInstanceOf[Duck#Val]
}
在 Scala 中,为外部 class 的每个 实例 定义了一个内部类型。所以你正在寻找的类型是 t.Val
,因为你必须提供外部 class 实例才能完全了解内部 class 类型。如果你想获得所有这些内部类型的超类型,你可以做 Outer#Inner
.