如何让这段代码更优雅?

时间:2016-05-05 23:51:35

标签: scala

我有以下功能:

private def solveError(hostIp: String, command: String) = {
  commandSlave(hostIp, "STOP SLAVE") match {
    case Success(x) => commandSlave(hostIp, command) match {
      case Success(y) => commandSlave(hostIp, "START SLAVE") match {
        case Success(z) => Success(z)
        case Failure(ex) => Failure(ex)
      }
      case Failure(ex) => Failure(ex)
    }
    case Failure(ex) => Failure(ex)
  }
}

我认为必须有更优雅的方式来编写这个功能,但我不确定如何。使用嵌套的匹配案例并不适合我,但我是Scala的新手并且我不知道是否有更好的方法。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

假设commandSlave返回TryflatMap就是你想要的:

commandSlave(hostIp, "STOP SLAVE")
  .flatMap(_ => commandSlave(hostIp, command))
  .flatMap(_ => commandSlave(hostIp, "START SLAVE"))

来自flatMap的{​​{1}}的scaladoc:

  

返回应用于此Success的值的给定函数,如果这是Failure,则返回此值。

此外,你可以在这里使用Try理解,内部消解for s的相同序列:

flatMap
相关问题