以编程方式设置抽象类型的`type`

时间:2009-12-17 13:00:26

标签: scala

class MyModel(var username:String, var password:String) extends FrameworkModel 

object MyModelQuery extends FrameworkQuery { 
  type T = MyModel 
} 

trait FrameworkQuery { 
type T 
//do something with that type 
} 

所以我得到一个类和一个对象,后者混合在一个被定义为抽象类型的特征中。有没有办法我可以编程方式将type设置为MyModel类的类型,所以客户端不需要?即“对象MyModelQuery扩展FrameworkQuery”将负责它

2 个答案:

答案 0 :(得分:0)

trait T{
    type X = this.type
    def x: X = this
}
object A extends T{
    def b = "Yep"
}    
scala> A.x.b
res0: java.lang.String = Yep

答案 1 :(得分:0)

您可以通过在模型中嵌套查询来实现类似的效果吗?

trait FrameworkModel {
  val model = this
  trait FrameworkQuery {
    type T = model.type
    def getModel: T = model
  }
}

class UserModel extends FrameworkModel {
  // model stuff...
  object UserQuery extends FrameworkQuery {
    // query stuff... 
  }
}