繁体   English   中英

存在类型之间的映射

[英]Mapping between existential types

我有几个这样的类:

class Value[T]

class Container[T](v: Value[T], x: T)

现在我想将(Value[T], T) s的序列转换为Container[T]的序列,其中序列的每个元素的T可以是不同的。 这种类型可以用存在表达:

def mapContainer(s: Seq[(Value[T], T) forSome {type T}]): Seq[Container[T] forSome {type T}]

但是,看来我无法写出这个功能的主体。 我天真的尝试失败了:

def mapContainer(s: Seq[(Value[T], T) forSome {type T}]) =
    s.map(t => new Container(t._1, t._2))

错误如下所示:

[error]  found   : Value[T]
[error]  required: Value[Any]
[error] Note: T <: Any, but class Var is invariant in type T.

我相信,我无法使Value协变,无论如何这不是正确的解决方案。

话虽这么说,我对结果类型Seq[Container[_]]也很好,但是我找不到一种方法来获取它。

是否有可能在不诉诸asInstanceOf等情况下表达这一点?

解:

改写

s.map(t => new Container(t._1, t._2))

s.map { case (v, x) => new Container(v, x) }

不幸的是,我没有解释为什么前者不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM