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
是隐式的,因此不会打印,除非它是路径中的唯一项目。
关于scope - 如何修改 raku 代码 "say $?PACKAGE;"以打印完全限定的包名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66443923/