【发布时间】:2018-09-15 20:03:17
【问题描述】:
我有一个我想要映射的存在类型对象的列表。像这样的:
sealed abstract class IntBox(val v: Int)
case object IB1 extends IntBox(1)
case object IB2 extends IntBox(2)
case class Adder[A <: IntBox](ib: A, v: Int) {
def add(i: A) = v + i.v
}
val adders: List[Adder[_ <: IntBox]] = List(Adder(IB1, 0), Adder(IB2, 0))
adders.map(adder => adder.add(adder.ib))
但是,我遇到了类似的错误
found: adder.ib.type
required: _$1
我觉得这有点像因为map 以某种方式将不同的IntBoxs 统一为一种无法获得的匿名类型...
我可以在不强制转换的情况下得到我想要的吗(即adder.asInstanceOf[Adder[adder.ib.type]]...?
【问题讨论】:
-
那是什么 Scala 版本? Scastie 和我的本地 scala 安装在它们接近列表之前很久就给出了“特征或对象可能没有参数”。
-
哈哈,抱歉我的意思是抽象类
-
顺便说一句,事实证明这实际上是重复的(或至少非常接近重复),并且解决方案实际上是相同的:Q: Type inference with existential type
标签: scala types polymorphism existential-type