对象中对象的顺序上循环的Scala
我有下面的案例课对象中对象的顺序上循环的Scala,scala,slick,scala-collections,Scala,Slick,Scala Collections,我有下面的案例课 case class BusinessInput(userId: String, name: String, location: Point, address: Option[String], phonenumber: Option[String], email: Option[String], hours: Seq[BusinessHoursInput]) 以及以下《营业时间》案例课程: case class BusinessHoursInput(weekDay: Int,
case class BusinessInput(userId: String, name: String, location: Point, address: Option[String], phonenumber: Option[String], email: Option[String], hours: Seq[BusinessHoursInput])
以及以下《营业时间》案例课程:
case class BusinessHoursInput(weekDay: Int, startTime: Time, endTime: Time)
我正在使用Slick,并试图为BusinessInput的小时字段中的每个BusinessHoursinput对象向DB添加一个BusinessHours行。我尝试了以下方法:
_ <- for(businessHours <- businessInput.hours) BusinessHours += BusinessHoursRow(businessRow.businessId, businessHours.weekDay, businessHours.startTime, businessHours.endTime)
现在我得到了以下错误:
value map is not a member of Unit
[error] _ <- for(businessHours <- businessInput.hours) BusinessHours += BusinessHoursRow(businessRow.businessId, businessHours.weekDay, businessHours.startTime, businessHours.endTime )
[error] ^
scala.collection.immutable.ListMap$Node cannot be cast to dao.BusinessHoursInput
如果这一行在for YILD CONTRUMENT中,您需要更改第一个
问题是您使用的for CONTRUMENT转换为映射。map需要将hours:Seq[businesshours输入]
转换为其他内容。
在地图中,您正在执行以下操作:BusinessHours+=BusinessHoursRow(businessRow.businessId,BusinessHours.weekDay,BusinessHours.startTime,BusinessHours.endTime)
此选项不会将hours
转换为其他内容。它将businesshoursrrow
添加到BusinessHours
和该操作返回单元中
那么如何解决呢
1) 将营业时间输入
转换为营业时间行
,然后将其插入营业时间
:
var businessHoursRows = businessInput.hours.map { businessHoursInput =>
BusinessHoursRow(businessHoursInput.businessId, businessHoursInput.weekDay,
businessHoursInput.startTime, businessHoursInput.endTime)
}
BusinessHours ++= businessHoursRows
2) 使用foreach
而不是map
:
businessInput.hours.foreach { businessHoursInput =>
businessHoursRows += BusinessHoursRow(businessHoursInput.businessId, businessHoursInput.weekDay,
businessHoursInput.startTime, businessHoursInput.endTime)
}
我不知道你是如何用开始代码的。请先看一看,Scala哲学是如何关于不变性的(而不是像+=
那样的突变)。
var businessHoursRows = businessInput.hours.map { businessHoursInput =>
BusinessHoursRow(businessHoursInput.businessId, businessHoursInput.weekDay,
businessHoursInput.startTime, businessHoursInput.endTime)
}
BusinessHours ++= businessHoursRows
businessInput.hours.foreach { businessHoursInput =>
businessHoursRows += BusinessHoursRow(businessHoursInput.businessId, businessHoursInput.weekDay,
businessHoursInput.startTime, businessHoursInput.endTime)
}