我正在编写一个有三种可能返回状态的方法:
返回类型Try[Option[String]]
看起来是否正确?或者有更好的选择吗?
答案 0 :(得分:2)
Lift的Box在结合Option和Try
的语义方面做得很好一个盒子可以是:
http://scala-tools.org/mvnsites/liftweb-2.3/net/liftweb/common/Box.html
答案 1 :(得分:1)
你的方法非常好。另一种方法是定义自己的案例类/对象
sealed trait Result
case class OperationFailed(e: Exception) extends Result
case class SuccessValue(str: String) extends Result
case object SuccessNoValue extends Result
编辑:
这种方法可以更好地与模式匹配,特别是如果你使用Akka。
val f: Any => Any = { case x: Try[Option[String]] => x.get.get.toUpperCase }
f(Try(Some("x")))
f(Try(Some(5))) // Throws java.lang.ClassCastException
以上将显示以下警告
警告:非变量类型参数类型模式中的Option [String] scala.util.Try [Option [String]]未选中,因为它已被删除 擦除