关于 scala 抽象类型的几个问题。
- 如果我想在构造函数值中使用类型,是否必须使用参数化 [] 类型?IE。是否可以有一个具有抽象构造函数参数类型的类?如果我摆脱 [T1,T2] 并使用 INode#TKey 和 INode#TValue 作为构造函数参数类型,我在做什么?我收到令人困惑的错误消息。
- 我如何在不求助于内部类型的情况下很好地解决这个问题?我在定义中使用 INode 似乎意味着我可以返回/接收具有不同类型的 TKey 和 TValue 的 INode。如何将其限制为与当前类型相同的 TKey/TValue 类型,而不限制自己返回/接收完全“this”实例?
trait AbsTypes
{
type TKey
type TValue
}
trait INode extends AbsTypes
{
def get(key : TKey) : TValue
def set(key : TKey, v : TValue) : INode
def combine(other : INode, key : TKey): INode
}
class ANode[T1,T2](
val akey : T1,
val aval : T2
) extends INode
{
type TKey = T1
type TValue = T2
type Node = ANode[T1,T2]
def get(key : TKey) : TValue = { aval }
def set(key : TKey, v : TValue) : INode = {
new ANode(key,v)
}
def combine(other : INode, key :TKey) : INode = {
//ERROR : type mismatch; found : key.type (with underlying type ANode.this.TKey) required: other.TKey
other.set(key, aval)
}
}