所以我有一个案例类,内部使用的案例类和另一个用于外部API的案例类。我正试图从一个转换到另一个。 当然,我可以手工编写每个参数并将其解决,但这很烦人,我每次添加或删除字段时都必须更新此代码。 我想要做到这一点:
import shapeless.syntax.std.tuple._
trait STrait {
def id: Option[Int] = None
def addressId: Option[Int] = None
def name: String
def about: Option[String] = None
def numberOfStudents: Option[Int] = None
def websiteUrl: Option[String] = None
def mediaId: Option[Int] = None
def slug: String
def shortDescription: Option[String] = None
def ready: Boolean
def classrooms: Option[Int] = None
def yearEstablished: Option[String] = None
def displayCopyright: Boolean
def createdAt: DateTime = DateTime.now
def updatedAt: DateTime = DateTime.now
def deletedAt: Option[DateTime] = None
def createdBy: Option[String] = None
def updatedBy: Option[String] = None
def dliNumber: Option[String] = None
}
case class S(override val id: Option[Int] = None,
override val addressId: Option[Int] = None,
override val name: String,
override val about: Option[String] = None,
override val numberOfStudents: Option[Int] = None,
override val websiteUrl: Option[String] = None,
override val mediaId: Option[Int] = None)
extends STrait
case class SAPI(override val id: Option[Int] = None,
override val addressId: Option[Int] = None,
override val name: String,
override val about: Option[String] = None,
override val numberOfStudents: Option[Int] = None,
override val websiteUrl: Option[String] = None,
override val mediaId: Option[Int] = None,
address: Option[Address] = None)
extends STrait {
def fromSchool(school: S): SAPI = {
val schoolApiData = S.unapply(school).get :+ Option.empty[Address]
(SAPI.apply _).tupled(sApiData)
}
}
我正在使用shapeless
添加一个参数来匹配应用元组中的params列表。但是,出于某种原因,这个S.unapply(school).get :+ Option.empty[Address]
不是一个元组,而是被视为prepend.Out
。
奇怪的是,如果我在控制台中执行相同的操作并将此行分配给val
,那么val的类型就是元组。
我错过了什么?