从路径相关类型mixin访问值

时间:2014-10-09 22:06:35

标签: scala path-dependent-type self-type

是否可以从内部特质mixin访问外部特征中的值?即:

trait Outer {
  val foo
  trait Inner
}

trait InnerMixin { this: Outer#Inner =>
  def bar {
    // how can I access 'foo' here? smth like Outer.this.foo
  }
}

感谢

2 个答案:

答案 0 :(得分:5)

因为你只能将你的InnerMixin混合在一个外部的扩展中,也许你可以在外部mixin中定义它,这样

trait Outer {

  val foo: Int

  trait Inner
}

trait OuterMixin  { this: Outer =>

  trait InnerMixin  { this: Inner =>
    def extension = OuterMixin.this.foo
  }
}

class ActualOuter extends Outer with OuterMixin {
  val foo = 12
  class ActualInner extends Inner with InnerMixin {

  }

}

注意:大多数时候,你不需要自我类型,你可以只做OuterMixin扩展Outer和InnerMixin扩展内部。

答案 1 :(得分:2)

向Inner添加一个字段,让您可以获得它的外部

trait Outer {
  val foo: String

  trait Inner {
    val outer = Outer.this
  }
}

trait InnerMixin { this: Outer#Inner =>
  def bar {
    outer.foo
  }
}