«Незаконно объявленные типы» с круговым определением класса - PullRequest
5 голосов
/ 03 февраля 2020

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;

Как мне заставить это работать?

1 Ответ

10 голосов
/ 03 февраля 2020

Можно, но вам нужно определить классы как заглушки.

class A { }

просто определит пустой класс. Принимая во внимание, что:

class A { ... }   # note the yadayadayada

определит заглушку. Поэтому добавление:

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

в начало вашего кода должно решить проблему.

...