我希望能够有一个带有可选参数的方法。当存在该可选参数时,它将调用特定的数据库查询,该查询返回使用该可选参数过滤的记录。如果该可选参数不存在,我希望它调用一个不按该可选参数过滤的数据库查询。
第一个查询尚未编写,但具有相同的返回结构和类型。编写第二个查询,并且在没有可选参数和大小写的情况下可以正常工作。
def getRecords(id: String, type: String = ""): Future[List[Set[String]]] = {
case Some(type) =>
val query =>
s"""
| ...
""".stripMargin
case _ =>
val query =>
s"""
| ...
""".stripMargin
record = get(dbResult).asList.asScala.map(_.toString).toSet
}
我收到的错误是
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: scala.concurrent.Future[List[Set[String]]]
: Future[List[Set[String]]] = {
^
有人可以向我解释该错误是什么意思吗?以及如何设计我想要的方法来工作?
注意:该方法的一些细节已被省略。本质上,它只返回返回类型的记录,以及其中一个查询获取的数据。
答案 0 :(得分:2)
当然,请发表您的评论:
def getRecords(id: String, `type`: Option[String] = None): Future[List[Set[String]]] = {
val matchResult = `type` match {
case Some(t) => //t is your string
val query =
s"""
| ...
""".stripMargin
//do something with your query val
case _ =>
val query =
s"""
| ...
""".stripMargin
//do something with your query val
}
//use your matchResult here, whatever that ends up being
//not sure how this works but just copied from your question:
get(dbResult).asList.asScala.map(_.toString).toSet
}
很显然,您必须在某个地方使用query
,但是我想您已经简化了这一点。如果您担心空字符串,可以在第一个case子句case Some(t) if t.nonEmpty => ...
中添加保护。 type
是反引号,因为它是一个关键字。如果您使用非关键字名称,则不需要反引号。