相互参照を保持する 2 つの抽象クラスがあります。派生 Hex クラスの SideT メンバーの HexT の型が常に派生 Hex クラスになるように、型メンバーを型バインドするにはどうすればよいですか? したがって、派生クラス HexA の場合、HexA#SideT#HexT = HexA が保証されます。
同様に、すべての派生サイド クラスの HexT メンバーの SideT の型は、派生サイド クラスになります。 SideB#HexT#SideT = SideB
私はEclipse 3.7.2でEclipse 2.1.0.M1にScalaを使用しています。すべてのクラスは別のファイルにあります。以下は正常にコンパイルされますが、私が望むものを保証しません:
abstract class Hex { type SideT <: Side {type HexT <= Hex } }
abstract class Side { type HexT <: Hex {type SideT <= side } }
class HexC() extends Hex() { type SideT = SideC }
class SideC extends Side { type HexT = HexC }
ただし、次のものは派生実装ではコンパイルされません。
abstract class Hex{type SideT <: Side {type HexT = this.type}}
abstract class Side{type HexT <: Hex {type SideT = this.type}}
class HexC() extends Hex(){
type SideT = SideC //This won't compile
}
class SideC extends Side {
type HexT = HexC //this won't compile
}
これは正しいです?これはコンパイルする必要がありますか?