如何修改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是隐式的,因此不会打印,除非它是路径中的唯一项目。


以上是如何修改raku代码"say$?PACKAGE;"打印完全限定的包名称的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>