时间:2010-07-26 04:47:59

标签: scala constructor types abstract path-dependent-type

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

答案 2 :(得分:2)

答案 3 :(得分:0)

感谢您的回答,他们是最有帮助的&真的帮助了我的理解。 我发现的一种替代解决方案如下。 AbsType不需要是基类,您可以使用它来包装参数化类型定义。


class ANode[T <: AbsTypes](
  val akey : T#TKey,
  val aval : T#TValue
) extends INode[T]
{
    def get(key : TKey) : TValue = { aval }
    def set(key : TKey, v : TValue) : Node = {
        new ANode[T](key,v)
    }
    def combine(other : Node, key : TKey) : Node = {
        other.set(key, aval)  // "use" this & other somehow
    }
}

// Examples
class AbsTypeDef[TKey1, TValue1] extends AbsTypes
{
    type TKey = TKey1
    type TValue = TValue1
}

object ANode
{
    type AIntString = AbsTypeDef[Int,String]
    type AStringLong = AbsTypes { type TKey = String; type TValue = Long}
    def n1 = new ANode[AIntString](1,"one")
    def n1b = new ANode[AIntString](2,"two")
    def n2 = new ANode[AStringLong]("two",2L)
    n1.combine(n1b,2)
    //n1.combine(n2,2)  // compile error
}