我想写一个同质的元组类型,有点平行内置的元组类型在斯卡拉。斯卡拉高收敛类型的问题与新集合类
我有以下几点:
trait HomogeneousTupleFactory [H <: HomogeneousTuple[_, H]] {
def makeHTuple[T] (values: Iterator[T]): HomogeneousTuple[T, H]
}
trait HomogeneousTuple [+T, H <: HomogeneousTuple[_, H]] extends Product {
def getFactory: HomogeneousTupleFactory[H]
def map [U] (fcn: T => U): HomogeneousTuple[U, H] = {
getFactory.makeHTuple(
this.productIterator.map(t => fcn(t.asInstanceOf[T]))
)
}
}
object HTuple2Factory extends HomogeneousTupleFactory[HTuple2[_]] {
def makeHTuple[T] (values: Iterator[T]): HTuple2[T] = {
new HTuple2(values.next, values.next)
}
}
class HTuple2[+T] (t1: T, t2: T) extends Tuple2(t1, t2)
with HomogeneousTuple[T, HTuple2[_]] {
def getFactory = HTuple2Factory
}
我想要得到它,这样HTuple2.map[U]
返回HTuple2[U]
而不是HomogeneousTuple[U, HTuple2]
(这是合法的,正确的,但不太方便),但我可以不能让它工作。
任何人有任何线索如何做到这一点?有没有比我所做的更好的方式?
作为一个侧面说明,你可能想从无形退房大中 - HTTPS:/ /github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/sized.scala –
可能已经发誓我试过了,但我必须错过或在某处添加了一个额外的[_]。非常感谢你。 –