Min*_*hai 2 types scala try-catch
我有这段代码
import scala.util.Try
val t: Try[Unit] = Try(Try(1))
Run Code Online (Sandbox Code Playgroud)
和2个问题:
Try[Try[Int]]匹配
Try[Unit]?是不是因为斯卡拉选择块返回类型
Try(1)为Unit以匹配所需的类型?Try?说我有Try[A],我怎么知道是否A是另一个Try[_]?您基本上是强制编译器指定Try为Unit.
例如,下面的doSomething方法应该返回Int为最后一个语句,但返回类型Unit强制它返回().
scala> def doSomething: Unit = 1 + 1
doSomething: Unit
Run Code Online (Sandbox Code Playgroud)
在您的示例中val t: Try[Unit] = Try(Try(1 / 0)),您要求编译器将内部Try(1 / 0)视为Unit; 意思是
scala> val innerTry: Unit = Try(1 / 0)
innerTry: Unit = ()
Run Code Online (Sandbox Code Playgroud)
这意味着即使Try失败,它Unit总是Success为Try你拥有的另一个.
scala> val t: Try[Unit] = Try(someOperation)
t: scala.util.Try[Unit] = Success(())
Run Code Online (Sandbox Code Playgroud)
最好删除您提供的特定类型,让编译器弄明白,
scala> val t = Try(Try(1 / 0))
t: scala.util.Try[scala.util.Try[Int]] = Success(Failure(java.lang.ArithmeticException: / by zero))
Run Code Online (Sandbox Code Playgroud)
final abstract class Unit private extends AnyVal {
// Provide a more specific return type for Scaladoc
override def getClass(): Class[Unit] = ???
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |