2014-10-09 2 views

ответ

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 { 

    } 

} 

Примечание : большую часть времени вам не нужен тип self, и вы можете сделать только OuterMixin, расширяет Outer и InnerMixin расширяет Inner.

2

Добавление поля к внутреннему, что позволяет получить на это внешнее

trait Outer { 
    val foo: String 

    trait Inner { 
    val outer = Outer.this 
    } 
} 

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