我正在尝试在步骤结束时创建部分功能。以下是我代表流程结果的方法。
sealed trait Result
object Result {
case class Success[T](result: T) extends Result
case class Fail(cause: String) extends Result
}
这是我对处理的表示。基本上他们是功能。
sealed trait Action[A, B] {
type ActionT <: ActionType.type
val function:(A) => Either[String, B]
def apply(v1: A): Result = function(v1) match {
case Right(v2) => Success(v2)
case Left(cause) => Fail(cause)
}
}
sealed trait ActionType
object ActionType {
case object Pre extends ActionType
case object Post extends ActionType
}
case class ActionA(function: Int => Either[String, String]) extends Action[Int, String]
{
override type ActionT = ActionType.Pre.type
}
case class ActionB(function: Int => Either[String, Int => Double]) extends Action[String, Int => Double]
{
override type ActionT = ActionType.Post.type
}
通常,我有大约十个动作。但是,要解释这个问题,两个就足够了。
我想创建一个合并功能。它将创建一个像
这样的部分功能 val pf = {
case ActionType.Pre => //actiona instance
case ActionType.Post => //actionb instanse
}
如果我想查询ActionType.Pre到这个部分函数,我应该得到actionA实例。 ActionA只是一个将Integer作为参数并且基本上返回Success(结果)的函数。这是问题所在。在应用程序中,我想知道结果的类型,它是此案例的字符串,以及actionb的函数(Int =&gt; Double)。
我如何知道结果类型?