在运行时我可以:
def X(R: Any): Any = X(R)
但不能为编译时做类似的事情:
scala> type X[R] = X[R]
<console>:11: error: illegal cyclic reference involving type X
type X[R] = X[R]
^
似乎是无限循环/递归保护,但据我了解停止问题- 没有通用方法来检测图灵完备语言的无限递归(因为检测器本身可能不会停止),因此额外的编译器检查通常不会在这里工作.
那么有没有办法在scalac上获得无限递归?而且,还有其他(除了防止这种递归)理由illegal cyclic reference
吗?