:Scalaに抽象型をアップキャストしないように指示するにはどうすればよいですか?ブルドッグを考慮
trait Animal {
type Food
def defaultFood(): Food
}
class Bulldog extends Animal {
type Food = Steak
... implementations ...
}
(私のシンタックスハイライトがエラーを与えたものの、これは大したことないです)コンパイラのためだけで正常に動作しBulldog.defaultFood()
機能:しかし
val bulldog = new Bulldog()
val df: bulldog.Food = bulldog.defaultFood()
ブルドッグが別の内部に封入されている場合は、クラスは、すべての地獄が緩んで破る:
class Kennel(val animal: Animal) {
}
def getSupply(kennel: Kennel): kennel.animal.Food = {
... implementation ...
}
val kennel = new Kennel(bulldog)
val df2: bulldog.Food = getSupply(kennel)
Scalaのコンパイラは、コンパイルエラーがスローされます:
type mismatch;
found : Option[kennel.animal.V] where val kennel: Kennel
required: bulldog.Food
現在、この機能はScalaにはありませんか?それを動作させる方法はありますか?
質問:オブジェクト食品ではなく、ブルドッグの実装で 'type Food = Steak'と書くつもりはありませんか? –
私の悪い、申し訳ありません。 – tribbloid
あなたは 'getSupply()' _does_を定義しておらず、戻り値の型しか持っていません。 – jwvh