我希望能够做到以下
之类的事情sealed trait S
trait S1 extends S
trait S2 extends S
case class A[Z <: S](item: URI @@ Z)
class SActor extends Actor {
def receive = {
case A[Z](item) =>
val item2: URI @@ Z = //do some sort of operation
sender ! A[Z](item2)
case _ =>
}
}
这是对实际代码的抽象。但问题归结为,我似乎无法抓住Z.我不想知道它是哪一个类,我只想维护Tag Z并能够在以后使用相同的Generic类标签创建另一个对象标记。这可以在传递一个标记为Z的结果的函数之外完成吗?
如果您在接收方法的case块中,则以下çode存在同样的问题,
EitherT((actor ? A(item)).mapTo[A]
//assume actor responds back with an A and the same Tag
A采用Generic但我们不知道要分配哪一个。我只是想使用它开始的那个(假设演员坚持那个合同)。编译器会说A需要泛型,但它要求特定的。 -_-感谢您阅读本文,特别感谢能解决这个问题的人