【发布时间】:2015-08-11 18:34:30
【问题描述】:
我有很多类似的案例类,它们的含义不同,但具有相同的参数列表。
object User {
case class Create(userName:String, firstName: String, lastName: String)
case class Created(userName:String, firstName: String, lastName: String)
}
object Group {
case class Create(groupName:String, members: Int)
case class Created(groupName:String, members: Int)
}
鉴于这种设置,我厌倦了编写接受 Create 类型参数并返回 Created 类型参数的方法。我有大量的测试用例可以做这种事情。
我可以编写一个函数来将一个案例类转换为另一个案例类。该函数将User.Create转换为User.Created
def userCreated(create: User.Create) = User.Create.unapply(create).map((User.Created.apply _).tupled).getOrElse(sys.error(s"User creation failed: $create"))
我不得不为 Group 编写另一个这样的函数。 我真正想要的是一个通用函数,它采用两种类型的案例类和一个案例类的对象并转换为另一种。类似的,
def transform[A,B](a: A):B
此外,此功能不应违背减少样板的目的。如果更易于使用,请随时为该函数建议不同的签名。
【问题讨论】:
-
你期待类似
convert(a).to[B]的东西吗? -
重要的是所有这些配对类都具有创建/创建的名称,还是您的要求纯粹是它们可以配对并且一个函数会将任何此类对的第一个类转换为第二个?
标签: scala boilerplate