使用特征引用访问自我类型字段

时间:2016-02-06 02:52:08

标签: scala

如果我有结构自我类型的特征

sealed trait UserView { self: {val userWrapper: UserWrapper} =>
....
}

以及uv类型的对象UserView,为什么uv.userWrapper无效?

1 个答案:

答案 0 :(得分:1)

嗯,自我可见的地方?是的,就在您的特征定义或扩展它的对象内部。它只是任何实例必须满足的条件,但它对UserView本身的类型没有任何影响。为什么会这样?它只是对自引用类型的约束。

自我类型对于声明此类约束非常有用,而无需将其放在类型的接口中。因此,您可以声明您的特征在混合时需要一些界面。

如果您希望所有实例都有某个字段,为什么不使用抽象定义:

sealed trait UserView {
  def userWrapper: UserWrapper
}

您可以使用def或val来实现它。