加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为什么案例类仅扩展产品而不是Product1,Product2,…,Pr

发布时间:2020-12-16 09:11:35 所属栏目:安全 来源:网络整理
导读:在我了解到案例类扩展产品后,我想知道为什么不扩展ProductN.例如: case class Foo(a: Int) 我会期望Foo(1).asInstanceOf [Product1 [Int]]工作,但不会(使用Scala 2.9.1进行检查,并由其他来源和产品文档确认). 我对此感兴趣,因为我想申报类如: abstract cla
在我了解到案例类扩展产品后,我想知道为什么不扩展ProductN.例如:

case class Foo(a: Int)

我会期望Foo(1).asInstanceOf [Product1 [Int]]工作,但不会(使用Scala 2.9.1进行检查,并由其他来源和产品文档确认).

我对此感兴趣,因为我想申报类如:

abstract class UnaryOp[T1 <: Exp[_],R](t1: T1) extends Exp[R] {
  this: Product1[T1] =>
}

这样一来,Unary操作的一个节点必须实现Product1.这将是很好,如果只是一个case类,一个参数就足够了.

解决方法

考虑这个:

case class X(n: Int)
case class Y(x: String,y: Int) extends X(y)

如果案例类扩展了ProductN,那么将扩展Product1和Product2,但type参数更改,因此_1有两个不同的重载.这只是一个问题 – 我敢打赌还有别的.

现在,案例类继承案例类已被弃用,Martin Odersky正在考虑使它们继承ProductN. AFAIK还没有完成,但障碍已经消除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读