[英]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.