scala - 使用尝试异常上下文

标签 scala error-handling

在Scala中是否可以在实际Try上下文之外使用Success(Failure/Exception)作为可以成功或失败的函数的返回类型?

最佳答案

Try的实例是SuccessFailure,其中 Failure

case class Failure[+T](exception: Throwable)

注意Failure必须如何与Throwable一起构造,因此我认为Try应该在Throwable的上下文中使用。所以我们不能做类似的事情
def foo: Try[Int] = {
  Failure(42) // Error: type mismatch; found : Int(42) required: Throwable
}

考虑在异常上下文之外使用Either而不是Try

解决评论考虑

猫的
  • Valid/Invalid:https://typelevel.org/cats/datatypes/validated.html
  • 用成功和失败案例的含义定义自己的ADT,然后在这些案例中包装函数结果

  • 在这两种情况下,您都不必使用异常。

    这是一个例子
    sealed trait MyValidationADT[T]
    case class Good[T](result: T) extends MyValidationADT[T]
    case class Bad[T](result: T) extends MyValidationADT[T]
    
    def foo(i: Int): MyValidationADT[Int] = Bad(42)
    
    foo(11) match {
      case Good(result) => "woohoo"
      case Bad(result) => "boom"
    }
    

    哪个输出
    res0: String = boom
    

    关于scala - 使用尝试异常上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921108/

    相关文章:

    json - 如何在 akka-http 中编码和解码 mongo ObjectId

    scala - SparkSQL Dataframe 函数是否爆炸保留顺序?

    swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

    iphone - NSSetUncaughtExceptionHandler 无法捕获 iPhone 上的所有错误

    ruby-on-rails - 错误处理多模型表格

    python - 在python中使用urllib时感应受密码保护的网站

    java - Java/Scala 有没有好的 GnuPG 加密库?

    java - IllegalStateException 未捕获

    flash - try-catch 不起作用?

    scala - 实现自定义重复直到结构