找出容器是类还是对象

jjm*_*elo 6 perl6 mop

我很好奇语法是班级或单身,所以我创建了这个小程序来找出:

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 );
Run Code Online (Sandbox Code Playgroud)

这使用多个调度来找出它,事实证明它Mini实际上是一个类.总的来说,有没有更短的方法来找到它?或者一种不需要知道包可能是实例的实际类的方法?

Chr*_*oph 7

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

Mini.DEFINITE ?? 'Object' !! 'Class'
Run Code Online (Sandbox Code Playgroud)

更确切地说

Mini.DEFINITE ?? 'concrete object' !! 'type object'
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • .oO(或者,与`:D`和`:U`,'Mini.DEFINITE ??'确定实例'!!'通用概念'一致) (2认同)