当前位置:  开发笔记 > 编程语言 > 正文

如何检查Perl 6模块?

如何解决《如何检查Perl6模块?》经验,为你挑选了1个好方法。

在另一个问题中(我如何在与程序相同的文件中声明和使用Perl 6模块?),我有这样的代码:

module Foo {
    sub foo ( Int:D $number ) is export {
        say "In Foo";
        }
    }

foo( 137 );

我想检查Foo模块以查看它是否已定义以及可能在其中进行一些调试的内容.既然Foo是一个模块而不是一个类,那么元方法是否有意义?

此外,我认为曾经有一种方法来获取类中的方法列表.我想获得一个模块中的子程序列表.这将是测试我定义正确的东西和Perl 6了解它们的一种方法.在我的Perl 5中,我经常测试我已经定义了一个子程序,因为我有一段时间,我会在模块中选择一个名称,并在测试中略有不同的名称(比如昨晚,我猜,有valid_valueis_value_value) .如果我可以测试foo已定义,我可以在这里进行一些调试.



1> Christoph..:

您可以通过在::其名称中添加尾部来获取包的符号表.这将适用于模块和类,但是在类的情况下将不包括任何方法,因为它们与类型对象而不是包本身相关联.

符号表是类型的Stash,它是关联的(即支持类似哈希的操作):

module Foo {
    sub foo is export { ... }
    sub bar is export(:bar) { ... }
    our sub baz { ... }
}

# inspect the symbol table
say Foo::.WHAT;       #=> (Stash)
say Foo::.keys;       #=> (EXPORT &baz)
say Foo::<&baz>.WHAT; #=> (Sub)

# figure out what's being exported
say Foo::EXPORT::.keys;          #=> (bar DEFAULT ALL)
say Foo::EXPORT::bar::.keys;     #=> (&bar)
say Foo::EXPORT::DEFAULT::.keys; #=> (&foo)
say Foo::EXPORT::ALL::.keys;     #=> (&bar &foo)

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有