Узнайте, является ли контейнер классом или объектом - PullRequest
0 голосов
/ 09 октября 2018

Мне было любопытно, что грамматики являются классами или синглетонами, поэтому я создал эту небольшую программу, чтобы выяснить:

grammar Mini {
    token TOP { \* <word> \* }
    token word { \w+ }
}

proto sub is-class( | ) { * };
multi sub is-class( Grammar:D $g ) { return "Object" };
multi sub is-class( Grammar:U $g ) { return "Class" };

say is-class( Mini );

Это использует множественную диспетчеризацию, чтобы выяснить это, и получаетсячто Mini на самом деле класс.Вообще, был бы более короткий способ узнать это?Или способ, при котором не требуется знать фактический класс, экземпляром которого может быть пакет?

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете устранить неоднозначность «экземпляры» и «классы» с помощью DEFINITE , т. Е.

Mini.DEFINITE ?? 'Object' !! 'Class'

или, скорее,

Mini.DEFINITE ?? 'concrete object' !! 'type object'

должно помочь.

...