Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个case类转换为另一个与Scala中的附加参数类似的case类_Scala_Tuples_Slick - Fatal编程技术网

将一个case类转换为另一个与Scala中的附加参数类似的case类

将一个case类转换为另一个与Scala中的附加参数类似的case类,scala,tuples,slick,Scala,Tuples,Slick,所以,问题在标题中,但这里是细节 我有两个案例课程: case class JourneyGroup(id: Option[Int] = None, key: UUID, name: String, data: Option[JsValue], accountId: Int,

所以,问题在标题中,但这里是细节

我有两个案例课程:

case class JourneyGroup(id: Option[Int] = None,
                        key: UUID,
                        name: String,
                        data: Option[JsValue],
                        accountId: Int,
                        createdAt: DateTime = DateTime.now,
                        createdById: Int,
                        updatedAt: Option[DateTime] = None,
                        updatedById: Option[Int] = None,
                        deletedAt: Option[DateTime] = None,
                        deletedById: Option[Int] = None)

背景:拥有这两个独立类的原因是,slick不支持集合,我需要手动构建相关对象的集合。归根结底,我不能让它与一个班的工作

我需要的是一个简单的方法,从一个转换到另一个。 在这一点上,为了解除我自己的封锁,我创建了一个手动转换:

def toJourneyGroupApi(parties: Seq[Party]): JourneyGroupApi = JourneyGroupApi(
    id = id,
    key = key,
    name = name,
    data = data,
    accountId = accountId,
    createdAt = createdAt,
    createdById = createdById,
    updatedAt = updatedAt,
    updatedById = updatedById,
    deletedAt = deletedAt,
    deletedById = deletedById,
    parties = parties
  )
这是工作,但非常丑陋,需要大量的维护

我试着做的一件事是:

  • 将源对象转换为元组

  • 使用
    shapeless

  • 并根据生成的元组构建目标对象

    进口不成形_ 导入syntax.std.tuple_

    val groupApi=(JourneyGroup.unapply(group.get:+Seq.empty[Party])(JourneyGroupApi.tuple)

  • 但是,这个东西声称,
    :+
    的结果不是tuple,即使在控制台中:

    Party.unapply(p.get)+Seq.empty[参与者]

    res0:(Option[Int],model.Parties.Type.Value,Int,Int,org.joda.time.DateTime,Int,Option[org.joda.time.DateTime],Option[Int],Option[org.joda.time.DateTime],Option[Int],Seq[model.Participant])=(无,客户端,12323422016-11-12T03:55:24.006-08:00987,无,无,无,无,无,无,列表())


    我做错了什么?也许还有另一种方法来实现这一点。

    < P>你能考虑作文吗?< /P>
    case class JourneyGroup(
      ...
    )
    case class JourneyGroupApi(
      journeyGroup: JourneyGroup=JourneyGroup(),
      parties: Seq[Party] = Seq()
    )
    
    转换
    journeyGroup
    就像
    JourneyGroupApi(journeyGroup,parties)
    一样,“转换”
    JourneyGroupApi
    就是访问
    JourneyGroupApi.journeyGroup
    的问题。你也许能想出对这个案子更有效的名字。不确定这种方法是否适合您的其余代码。特别是在journeyGroupApi中引用journeyGroup属性将是一个额外的级别,例如,
    journeyGroupApi.journeyGroup.accountId
    。(这可能通过journeyGroupApi上的“快捷方式”定义来缓解,如
    lazy val accountId=journeyGroup.accountId


    继承也可能是一个用一个基本案例类来考虑的一个方法,它是一个正常的类(不是case类),它以方作为额外的属性来扩展它。此选项将在本文中进一步讨论。

    这是一个选项,但正如您所提到的,它不适合代码的其余部分。谢谢
    case class JourneyGroup(
      ...
    )
    case class JourneyGroupApi(
      journeyGroup: JourneyGroup=JourneyGroup(),
      parties: Seq[Party] = Seq()
    )