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

问题描述 投票:2回答:1

Rakudo版本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;
}

===SORRY!=== Error while compiling …
Illegally post-declared types:
    A1 used at line 7
    Q1 used at line 7

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

===SORRY!=== Error while compiling …
Too late for unit-scoped class definition;
Please use the block form.
…:6
------> class A1;⏏ class Q1;

我如何使其起作用?

porting raku
1个回答
1
投票

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

class A { }

将只定义一个空类。而:

class A { ... }   # note the yadayadayada

将定义一个存根。因此添加:

class A1 { ... }
class Q1 { ... }

在代码顶部,应解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.