返回Try [Option [String]]是否有意义?

时间:2014-09-25 01:36:15

标签: scala

我正在编写一个有三种可能返回状态的方法:

  • 操作可能因异常而失败
  • 操作可以成功使用String结果
  • 操作可以成功但没有结果

返回类型Try[Option[String]]看起来是否正确?或者有更好的选择吗?

2 个答案:

答案 0 :(得分:2)

Lift的Box在结合Option和Try

的语义方面做得很好

一个盒子可以是:

  • Full(value)=>一些(值):选项
  • 空=>无:选项
  • 失败(ex)=>失败:尝试

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]]未选中,因为它已被删除   擦除