带有循环类定义的“非法后声明类型”

dax*_*xim 5 porting raku

乐堂版本 2020.01

这不编译。

use v6;

class N1 {}
class T1 {}

class G1 {
    has @.g is required where A1|Q1;
}

class Q1 {
    has $.q is required where N1|T1|G1;
}

class A1 {
    has Q1 @.a is required;
}
Run Code Online (Sandbox Code Playgroud)
===SORRY!=== Error while compiling …
Illegally post-declared types:
    A1 used at line 7
    Q1 used at line 7
Run Code Online (Sandbox Code Playgroud)

我认为仅在 G1 之前声明标识符会帮助我,但这也失败了:

===SORRY!=== Error while compiling …
Too late for unit-scoped class definition;
Please use the block form.
…:6
------> class A1;? class Q1;
Run Code Online (Sandbox Code Playgroud)

我如何使它工作?

Eli*_*sen 10

您可以,但您需要将类定义为存根。

class A { }
Run Code Online (Sandbox Code Playgroud)

只会定义一个空类。然而:

class A { ... }   # note the yadayadayada
Run Code Online (Sandbox Code Playgroud)

将定义一个存根。所以补充:

class A1 { ... }
class Q1 { ... }
Run Code Online (Sandbox Code Playgroud)

到您的代码顶部,应该可以解决问题。