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

为什么我不能在Scala中创建F-bounded对象

发布时间:2020-12-16 18:34:05 所属栏目:安全 来源:网络整理
导读:假设我有: trait A[AA : A[AA]]//or even just `trait A[AA] 这不起作用: scala object AAA extends A[AAA.type]console:8: error: illegal cyclic reference involving object AAA object AAA extends A[AAA.type] ^ 但这有效: scala class AAA extends
假设我有:

trait A[AA <: A[AA]]
//or even just `
trait A[AA]

这不起作用:

scala> object AAA extends A[AAA.type]
<console>:8: error: illegal cyclic reference involving object AAA
   object AAA extends A[AAA.type]
                        ^

但这有效:

scala> class AAA extends A[AAA]; object AAA extends AAA
defined class AAA
defined module AAA

做几乎(不完全)相同,这是有效的.任何原因?

附:而且,can I do内部的这个对象究竟是什么强制编译器本身内部的infinte循环?

解决方法

正如您在标题中提到的那样,工作案例类AAA扩展A [AAA]是 F-bounded polymorphism的一个示例,它是一个递归类型定义,其中定义引用自身.递归在类型中相当普遍,甚至是简陋的 List is recursive;它是相当清楚的领域.

但是,对象AAA扩展A [AAA.type]不是递归类型.这里的AAA是一个值,您的声明要求编译器在定义值时解析对值类型的引用,这不是Scala设计/打算具有的功能.

(编辑:李大同)

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

    推荐文章
      热点阅读