def someA
(trait B
)はB
と同じC#MyType
のtrait A
を使用しますか? (Then A#MyType =:= B#MyType
)ケーキのパターンとタイプ
trait C {
type MyType
}
trait A {
self: C =>
def doSomething(s: MyType) { println(s.toString)}
}
trait B {
self: C =>
def someA: A
def myType: MyType
def action = someA.doSomething(myType)
}
// Mix part
case class Ahoy(value: String)
trait ConcreteC extends C {
type MyType = Ahoy
}
class PieceOfCake extends B with ConcreteC {
val someA = new A with ConcreteC
val myType = Ahoy("MyType")
}
コンパイルされません。タイプが一致しません。あなたがMyType
のパス独立したバージョンを使用するdoSomething
とmyType
を宣言することができます
[error] found : B.this.MyType
[error] required: _1.MyType where val _1: A
[error] def action = someA.doSomething(myType))
これはコンパイルされますが、より特定のSomeTypeとBを混在させることはできません。 – jwinandy