如何使用scala从另一个方法调用方法?

时间:2017-10-19 17:37:50

标签: scala playframework

我在scala中有两个存储库。在一个回购中,我定义了两种方法。这里从一个方法我需要调用另一个方法,代码工作在另一个存储库中定义。我被困在调用方法。我不确定错误是由于返回类型还是其他一些代码逻辑。所以,我需要帮助,因为我遇到了这个问题。

在onerepo.scala =>

   override def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = {
       doQueryIgnoreRowErrors(allQuery, "loginName" -> loginName)
       val output = methodtocallnextquery()   
       doQueryIgnoreRowErrors(methodtocallnextquery) // getting error here as cannot resolve with such signature
   }

   def methodtocallnextquery() = {
      if(map2Object.roleName != "" && map2Object.PersonID.isEmpty) {
         logger.error("user not autorised")
      } else {
         billingMonthCheckRepository.getrepo()
   }

在第二次回购中,我有=>

   override val allQuery = s"""select * from table1"""

   def getrepo(): Future[Seq[HierarchyEntryBilling]] = {
      doQueryIgnoreRowErrors(allQuery)
   }

// doquery定义为:=>

  protected def doQueryIgnoreRowErrors(query: String, args: NamedParameter*) 
  = {  logger.debug(s"SQL: $query, args: $args")

  TimedFuture(actualityTimeout) {
  queryHandler.doQuery(query, args: _*) map { list =>
    // ignore mapping errors of specific rows
    list.flatten
  }
  } flatMap {
  case scala.util.Success(s) => Future.successful(s)
  case Failure(ex) if ex.isInstanceOf[SQLException] &&
    ex.getMessage == "The executeQuery method must return a result set." => 
  Future.successful(Nil)
  case Failure(fail)         =>
    Future.failed(fail)

1 个答案:

答案 0 :(得分:1)

您怀疑methodtocallnextquery函数的返回类型并不是您认为的。 logger.error可能会返回Unit(我在这里猜测,但这似乎很可能)。如果是,则该方法的返回类型为Any,这可能与doQueryIgnoreRowErrors所需的参数类型不匹配。