簡體   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