scope - 如何修改 raku 代码 "say $?PACKAGE;"以打印完全限定的包名称

标签 scope package raku

    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/

相关文章:

php - PHP 中的 C 风格变量初始化

javascript - AngularJS 事件处理程序不触发

java - 如何使用系统默认套接字实现 SocketImplFactory

php - "composer"包管理器如何工作?

oop - (如何) raku 做类同义词?

php - Python 的 locals() 的 PHP 等价物是什么?

javascript - 如何让 angularJS $watch 检测样式的变化?

unix - 打包用于部署跨平台?

raku - perl6的stat函数

variables - 为什么 Perl 6 状态变量对于不同的文件表现不同?