考虑斗牛犬:如何指示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,all hell break loose:
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
此功能目前在斯卡拉缺失吗?有什么办法可以使它工作吗?
一个问题:你是不是打算在牛头犬实现中编写'type Food = Steak',而不是'object Food'? –
对不起,我修好了。 – tribbloid
你还没有定义什么'getSupply()'_does_,只是它有一个返回类型。 – jwvh