我有以下功能:
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的新手并且我不知道是否有更好的方法。非常感谢任何帮助。
答案 0 :(得分:5)
假设commandSlave
返回Try
,flatMap
就是你想要的:
commandSlave(hostIp, "STOP SLAVE")
.flatMap(_ => commandSlave(hostIp, command))
.flatMap(_ => commandSlave(hostIp, "START SLAVE"))
来自flatMap
的{{1}}的scaladoc:
返回应用于此Success的值的给定函数,如果这是Failure,则返回此值。
此外,你可以在这里使用Try
理解,内部消解for
s的相同序列:
flatMap