dk1*_*k14 5 generics polymorphism types scala
假设我有:
trait A[AA <: A[AA]]
//or even just `
trait A[AA]
Run Code Online (Sandbox Code Playgroud)
这不起作用:
scala> object AAA extends A[AAA.type]
<console>:8: error: illegal cyclic reference involving object AAA
object AAA extends A[AAA.type]
^
Run Code Online (Sandbox Code Playgroud)
但这有效:
scala> class AAA extends A[AAA]; object AAA extends AAA
defined class AAA
defined module AAA
Run Code Online (Sandbox Code Playgroud)
做几乎(不完全)相同,这是有效的.任何原因?
正如您在标题中提到的,工作案例class AAA extends A[AAA]是F-bounded polymorphism的一个示例,它是一个递归类型定义,其中定义引用自身。递归在类型中相当常见,即使是不起眼的List 也是递归的;这是一个相当容易理解的领域。
但是,object AAA extends A[AAA.type]不是递归类型。这AAA是一个值,您的声明要求编译器在定义值时解析对值类型的引用,这不是 Scala 设计/打算具有的功能。
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |