为什么我不能在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设计/打算具有的功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |