Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 异常时让步:找到必需的Seq[MyObject]Seq[Product with serializable]_Scala - Fatal编程技术网

Scala 异常时让步:找到必需的Seq[MyObject]Seq[Product with serializable]

Scala 异常时让步:找到必需的Seq[MyObject]Seq[Product with serializable],scala,Scala,我想通过请求进行迭代:Seq[Request]并在每个元素上运行一个函数getSingleResponse(Request)。通常它会产生响应(请求,一些(…),但如果失败,我希望它会产生响应(响应,无) 使用此代码时,getResponse的返回类型不匹配: private def getResponse(requests: Seq[Request]): Seq[Response] = { def getSingleResponse(request: Request) = {

我想通过
请求进行迭代:Seq[Request]
并在每个元素上运行一个函数
getSingleResponse(Request)
。通常它会产生
响应(请求,一些(…)
,但如果失败,我希望它会产生
响应(响应,无)

使用此代码时,
getResponse
的返回类型不匹配:

  private def getResponse(requests: Seq[Request]): Seq[Response] = {

    def getSingleResponse(request: Request) = {
      val count = getCount()
      Response(request, Some(count))
    }

    def getEmptyResponse(request: Request) = {
      Response(request, None)
    }

    for (request <- requests) yield {
      delay
      try{
        Some(getSingleResponse(request))
      } catch {
        case e: Exception => {getEmptyResponse(request)}
      }
    }
  }
private def getResponse(请求:Seq[Request]):Seq[Response]={
def getSingleResponse(请求:请求)={
val count=getCount()
响应(请求,部分(计数))
}
def getEmptyResponse(请求:请求)={
响应(请求,无)
}
对于(请求{getEmptyResponse(请求)}
}
}
}
必需:scala.Seq[响应]

发现:scala.collection.Seq[Product with Serializable]

这是因为编译器将
try
表达式的公共最近超类型推断为
Product with Serializable
of
Response
(catch块的结果类型)和
选项[Response]
try
块的结果类型)

要使两个块的公共超类型都成为
Response
,应该省略将
getSingleResponse
的结果包装到
Some

val result: Seq[Response] = 
  for (request <- requests) yield {
    delay
    try {
      getSingleResponse(request)
    } catch {
      case e: Exception => getEmptyResponse(request)
    }
  }

这是因为编译器将
try
表达式的公共最近超类型推断为
产品,该产品具有
Response
(结果类型为
catch
块)和
选项[Response]
(结果类型为
try
块)

要使两个块的公共超类型都成为
Response
,应该省略将
getSingleResponse
的结果包装到
Some

val result: Seq[Response] = 
  for (request <- requests) yield {
    delay
    try {
      getSingleResponse(request)
    } catch {
      case e: Exception => getEmptyResponse(request)
    }
  }

@LuisMiguelMejíaSuárez感谢您的建议,更新了answer@LuisMiguelMejíaSuárez感谢您的建议,更新了答案