找出容器是类还是对象

时间:2018-10-09 05:41:12

标签: perl6 mop

我很好奇grammars是类还是单例,因此我创建了这个小程序来找出:

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 :(得分:7)

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

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

或更确切地说

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

应该可以解决问题。