从路径相关类型mixin访问值

epr*_*rst 6 scala self-type path-dependent-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
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Did*_*ont 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 {

  }

}
Run Code Online (Sandbox Code Playgroud)

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