6

我很好奇语法是类还是单例,所以我创建了这个小程序来找出:

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实际上是一个类。一般来说,会有更短的方法来找出这个吗?还是一种不需要知道包可能是实例的实际类的方法?

4

1 回答 1

7

您可以通过DEFINITE消除“实例”和“类”的歧义,即

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

更确切地说

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

应该做的伎俩。

于 2018-10-09T10:10:21.203 回答