【发布时间】:2014-01-01 22:37:12
【问题描述】:
我正在尝试了解如何在模式匹配期间将类型参数传递给类,并将其隐含在后续方法中(不是匹配的类的一部分),如下所示:
类:
case class QueryRequest[A](data: List[A])
模式匹配:
def receive = {
case QueryRequest(data) => sender ! QueryResponse(setScanRecords(data))
...
}
方法:
def setScanRecords[A](data: List[A]) =
db withTransaction { data foreach ScanRecords.insert }
类型A将是一个变量组合的元组,例如:
(String, String, Long)
或
(String, String, String, String)
等等
最好的方法是什么?目前setScanRecords 抛出如下异常:
type mismatch; found : [TT](query: scala.slick.lifted.Query[TT,(String, String, Long)])(implicit session: scala.slick.session.Session)Int <and> (value: (String, String, Long))(implicit session: scala.slick.session.Session)Int required: A => ?
编辑1:
详细来说,当我在方法调用中显式调出方法中的类型时,会出现另一种错误:
方法:
def setScanRecords(data: List[(String, String, Long)]) =
db withTransaction { data foreach ScanRecords.insert }
错误:
case QueryRequest(data) => sender ! QueryResponse(setScanRecords(data))
type mismatch; found : Any required: List[(String, String, Long)]
【问题讨论】:
-
除了
QueryRequest的一个类型参数和setScanRecords的一个类型参数,您可以通过将其移至封闭类/特征来分解它吗?你可以让你的actor类通用吗? -
InsertQueryRequest是如何定义的?喜欢QueryRequest? -
@Qerub,复制/粘贴/简化错误。我已经在上面更正了。 InsertQueryRequest = QueryRequest.