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
ofResponse
(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感谢您的建议,更新了答案