如何在Scala中使用族多态性
我有一段代码需要改进,因为它有一些默认值: 鉴于以下类型的简化:如何在Scala中使用族多态性,scala,polymorphism,Scala,Polymorphism,我有一段代码需要改进,因为它有一些默认值: 鉴于以下类型的简化: trait Entity case object AEntity extends Entity case object BEntity extends Entity case object CEntity extends Entity case class A case class B case class C 代码如下: def loaderForEntity : Entity => EntityLoader[_]
trait Entity
case object AEntity extends Entity
case object BEntity extends Entity
case object CEntity extends Entity
case class A
case class B
case class C
代码如下:
def loaderForEntity : Entity => EntityLoader[_] = {
case EntityA => aLoader
case EntityB => bLoader
case EntityC => cLoader
}
type Location = …
trait EntityLoader[EntityT] extends ((Location, Service) => EntityT)
def aLoader = new EntityLoader[A] { def apply(l: Location, store: Service) = store.aForId(l.right.get) }
def bLoader = new EntityLoader[B] { def apply(l: Location, store: Service) = store.bForId(l.right.get) }
def cLoader = new EntityLoader[C] { def apply(l: Location, store: Service) = store.cForId(l.right.get) }
如何改进此代码?
如何了解A和EntityA之间关系的类型系统A目前尚不清楚实体及其后代是用于什么目的的。A,B,C,不能扩展一个公共特性吗?实体是一个枚举,表示类A,B,C的所有可能类型。A,B,C不扩展一个公共特性,但它肯定应该允许EntityLoader中的类型边界。这是可能设计的限制吗?