如何修改raku代码"say$?PACKAGE;"打印完全限定的包名称
say $?PACKAGE;
class Foo {
say $?PACKAGE;
class Bar {
say $?PACKAGE;
my package P {say $?PACKAGE;}
}
}
此代码打印:
(GLOBAL)
(Foo)
(Bar)
(P)
通缉:
(GLOBAL)
(GLOBAL::Foo)
(GLOBAL::Foo::Bar)
(GLOBAL::Foo::Bar::P)
回答
为了可能有相同问题的其他人的利益,我将扩展您在@ugexe 的评论中已经得到的正确答案:
您可以通过$*PACKAGE
使用.raku方法或(仅在 Rakudo 上)使用dd例程打印调试表示来打印完整的包路径。
因此,您的代码可以修改为具有如下所示的输出:
dd $?PACKAGE; # OUTPUT: «GLOBAL»
class Foo {
dd $?PACKAGE; # OUTPUT: «Foo»
class Bar {
dd $?PACKAGE; # OUTPUT: «Foo::Bar»
my package P {say $?PACKAGE;} # OUTPUT: «Foo::Bar::P»
}
}
请注意,这GLOBAL
是隐式的,因此不会打印,除非它是路径中的唯一项目。