gpt4 book ai didi

perl - 获取给定 Perl 类或模块中的所有方法和/或属性

转载 作者:行者123 更新时间:2023-12-04 17:48:47 25 4
gpt4 key购买 nike

我正在处理一个明显简单的问题。

我正在编写一个类似于 UML::Class::Simple 的模块但有一些改进。总而言之,这个想法是为给定源中的每个模块检索一张记录卡,其中包含有关方法、属性、依赖项和子项的信息。我当前的问题是获取每个模块的方法和属性。让我们看看我已经编写的代码:

use Class::Inspector;
use Data::Dumper;
sub _load_methods{
my $pkg = shift;
my $methods = Class::Inspector->methods( $pkg, 'expanded' );
print Dumper $methods;
return 1;
}

为给定的包调用此函数,我得到的方法比我预期的要多。原因是 Class::Inspector如果模块是 Moose::Object,则返回所有继承的方法和访问器。我想过滤所有这些方法以获取给定包中定义的方法,而不是其父包中定义的方法。

任何人都可以提供一种优雅的方式来按照我建议的方式过滤方法列表吗?

提前致谢。

最佳答案

如果一个类是 Moose 类,不要用 Class::Inspector 检查它. Moose 提供自己的非常广泛内省(introspection) API。它可以为您提供方法、属性等列表。

my $meta = Moose::Util::find_meta($class_name);

my @isa = $meta->superclasses;
my @does = $meta->calculate_all_roles;
my @can = $meta->get_method_list;
my @has = $meta->get_attribute_list;

遗憾的是,所有这一切的文档都分散在许多不同的页面上。 Moose::Meta::Class不是一个糟糕的起点。

Mouse 提供了一个几乎但不完全相同的内省(introspection) API。

Moo 不提供自己的自省(introspection) API,但如果加载 Moose 将 Hook 到 Moose 的 API,以便您可以使用 Moose::Util::find_meta 检索有关 Moo 类的信息.

关于perl - 获取给定 Perl 类或模块中的所有方法和/或属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23635041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com