了解抽象类型

时间:2013-08-20 10:21:15

标签: scala types abstract-type

我有以下课程:

abstract class Base {
  type T
  def myMethod: T
}

abstract class B extends Base {
  type T <: String
}

abstract class C extends Base {
  type T <: Int
}

现在,如果我写这个:

class Test{
    self: B with C => 
    // do sth with myMethod
}

myMethod将导致类型为Int的某事。另一方面,如果我写这个:

class Test{
    self: C with B => 
    // do sth with myMethod
}

我将获得类型String。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

是的,我可以!这是a bug!根据Martin Odersky本人的说法,这是“Scala类型系统中的一个基本问题”的结果(请参阅有关该问题的评论以及今天早些时候的this question)。