当我了解到案例类扩展了 Product 后,我想知道为什么它们不扩展 ProductN。例如,给出如下代码:
case class Foo(a: Int)
我预计Foo(1).asInstanceOf[Product1[Int]]
工作,但它没有(用 Scala 2.9.1 检查,并由其他来源和Product
文档)。
我对此很感兴趣,因为我想声明以下类:
abstract class UnaryOp[T1 <: Exp[_], R](t1: T1) extends Exp[R] {
this: Product1[T1] =>
}
这样,一元运算的节点必须实现 Product1。如果只是一个带有一个参数的案例类就足够了,那就太好了。
考虑一下:
case class X(n: Int)
case class Y(x: String, y: Int) extends X(y)
如果案例类别扩展ProductN
,那么这将延长两者Product1
and Product2
,但是类型参数发生了变化,因此有两种不同的重载_1
。这只是一个问题——我敢打赌还有其他问题。
现在,案例类继承案例类已被弃用,Martin Odersky 现在正在考虑让它们继承 ProductN。 AFAIK,虽然还没有完成,但障碍已经消除了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)