Scala中错误处理中的错误上下文
假设我需要调用远程JSON/HTTP服务。我发出一个JSON请求,通过HTTP将其发送到服务器,然后接收并解析JSON响应 假设我的错误数据类型为Scala中错误处理中的错误上下文,scala,error-handling,either,Scala,Error Handling,Either,假设我需要调用远程JSON/HTTP服务。我发出一个JSON请求,通过HTTP将其发送到服务器,然后接收并解析JSON响应 假设我的错误数据类型为MyError,所有函数返回或[MyError,R] type Result[A] = Either[MyError, A] def makeJsonRequest(requestData: RequestData): Result[String] = ... def invoke(url: URL, jsonRequest: String
MyError
,所有函数返回或[MyError,R]
type Result[A] = Either[MyError, A]
def makeJsonRequest(requestData: RequestData): Result[String] = ...
def invoke(url: URL, jsonRequest: String): Result[String] = ...
def parseJsonResponse(jsonResponse: String): Result[ResponseData] = ...
我可以将它们结合起来编写一个新函数:
def invokeService(url: URL, requestData: RequestData) Result[ResponseData] = for {
jsonRequest <- makeJsonRequest(requestData).right
jsonResponse <- invoke(url, req).right
responseData <- parseJsonResponse(jsonResponse).right
} yield responseData
def invokeService(url:url,requestData:requestData)结果[ResponseData]=for{
jsonRequest如果这是一个特定的情况,我会将MyError
转换成一个trait(ADT),并允许其中一个可能的值为jsonparsingfiled(jsonRequest,…)
如果它更通用,我可能会使用Writer
(或者更确切地说键入MyWriter[A]=Writer[Vector[MyLogEntry],A]
,然后使用EitherT[MyWriter,MyError,A]
)在每个阶段“记录事件”。谢谢。我对通用解决方案更感兴趣。不过我更喜欢存储“执行上下文”(即作用域中的变量)存储在内存中,而不是将它们写入日志。您是-Writer
将数据存储在内存中,除非您对其执行其他操作。遗憾的是,我认为没有一种通用的方法来存储“作用域中的所有内容”,您必须手动捕获重要内容。明白了。再次感谢。我可能会重新表述此问题以使其更清楚(并获得更多答复:))不确定我是否完全理解您的问题,但您可以使用.left.map(…)在任一问题的左侧进行映射
。谢谢你的建议。我会试着问另一个问题。