Skip to content

Instantly share code, notes, and snippets.

@Centaur
Last active August 29, 2015 14:09
Show Gist options
  • Save Centaur/2e6d5f55d2a2f2a3943a to your computer and use it in GitHub Desktop.
Save Centaur/2e6d5f55d2a2f2a3943a to your computer and use it in GitHub Desktop.
Refactor protocolMap
import util._
abstract class SrcProtocol(val id: String)
case class CompileSrc(override val id:String) extends SrcProtocol(id)
case class TestSrc(override val id:String) extends SrcProtocol(id)
case class SystemSrc(override val id:String) extends SrcProtocol(id)
abstract class DstProtocol(val id: String)
case class CompileDst(override val id: String) extends DstProtocol(id)
case class TestDst(override val id: String) extends DstProtocol(id)
case class SystemDst(override val id: String) extends DstProtocol(id)
def idConvert(id: String): Try[String] =
if(id == "good") Success("dst:"+id) else Failure(new RuntimeException(id))
def protocolMap(src: SrcProtocol): Unit = {
src match {
case CompileSrc(id) =>
idConvert(id) match {
case Success(id) => println(CompileDst(id))
case Failure(e) => println(e)
}
case TestSrc(id) =>
idConvert(id) match {
case Success(id) => println(TestDst(id))
case Failure(e) => println(e)
}
case SystemSrc(id) =>
idConvert(id) match {
case Success(id) => println(SystemDst(id))
case Failure(e) => println("syserror")
}
}
println("finished")
}
protocolMap(CompileSrc("good"))
protocolMap(CompileSrc("bad"))
protocolMap(TestSrc("good"))
protocolMap(TestSrc("bad"))
protocolMap(SystemSrc("good"))
protocolMap(SystemSrc("bad"))
@zhongwm
Copy link

zhongwm commented Nov 14, 2014

不应该是这样吗?

def protocolMap(src: SrcProtocol):Try[DstProtocol] = {
  src match {
    case CompileSrc(id) =>
      idConvert(id).flatMap({s: String => Try(CompileDst(id))})
    case TestSrc(id) =>
      idConvert(id).flatMap({s: String => Try(TestDst(id))})
    case SystemSrc(id) =>
      idConvert(id).flatMap({s: String => Try(SystemDst(id))})
  }
}

println(protocolMap(CompileSrc("good")))
println(protocolMap(CompileSrc("bad")))
println(protocolMap(TestSrc("good")))
println(protocolMap(TestSrc("bad")))
println(protocolMap(SystemSrc("good")))
println(protocolMap(SystemSrc("bad")))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment