scala下界类型"与"另一种类型?

时间:2015-08-24 22:35:43

标签: scala

这是代码

class Result[A] {
    def map[B](f: (Result[A] => Result[B]), xResult: Result[A]) = {
      xResult match {
        case Success(x)    => Success(f(xResult))
        case Failure(errs) => Failure(errs)
      }
    }

    def apply[B](fResult: Result[A], xResult: Result[B]) = {
      (fResult, xResult) match {
        case (Success(f), Success(x))        => Success((f, x))
        case (Failure(errs), Success(a))     => Failure(errs)
        case (Success(a), Failure(errs))     => Failure(errs)
        case (Failure(errs), Failure(errs2)) => Failure(List(errs, errs2))
      }
    }
  }

  case class Success[A](a: A) extends Result[A] {}

  case class Failure[A](a: A) extends Result[A] {}

  def createCustomerId(id: Int) = {
    if (id > 0)
      Success(id)
    else
      Failure("CustomerId must be positive")
  }

以下是问题

1)来自方法createCustomer的类型推断的结果就像这样

Product with Serializable with Result[_ >: Int with String] 

我没有使用#Serial; Serial with Serializable"事情,我想知道的是如何做一些有意义的结果,只是出于好奇,如何初始化这样的类型。

假设我有另一种方法,如下所示

def createCustomer(customerId: Result[_ >: Int with String], email: Result[String]) = {
    how can i read/do something with "customerId" argument
  }

如何初始化类似

的类型
val x: Result[Int with String] = ???

备注:

  1. 我知道我的Result类没有任何泛型" getter"
  2. 我知道方法可能会更容易" createCustomerId"如果是id> 0我返回成功(id.ToString),但我真的想知道这种较低类型的情况以及我将来如何利用(如果可能的话)

0 个答案:

没有答案