![]() |
1
13
托德·加德纳提出的使用驼鹿的建议是一个很好的建议,但是他选择的示例代码并没有很好的帮助。 如果你正在使用类检查一个非驼鹿,你可以这样做:
见 Class::MOP::Class docs 更多关于如何反省的细节。 您还会注意到我使用了class::mop而不是moose。类::mop(mop=元对象协议)是moose构建的基础。如果你正在学习非驼鹿课程,用驼鹿反省并没有什么好处。
如果你愿意,你可以
|
![]() |
2
10
使用已经提供的答案,您可以很容易地获得类的定义方法列表。然而,Perl是一种动态语言,这意味着以后可以定义更多的方法。实际上没有一种方法可以获得任何特定类将处理的所有方法的列表。关于这类事情的更多细节,我在 Mastering Perl . 人们给你的(和赞成的)答案没有告诉你限制。
亚当提到他的
Class::Inspector
,但它实际上不起作用,因为它试图做动态语言不做的事情(这是静态的):例如,这里有一个片段,class::inspector不返回任何方法,但我仍然可以调用
这是另一种情况,我可以调用任何我喜欢的方法,但是class::inspector只返回
奇怪的是,每个人似乎都忽视了Universal,可能是因为他们没有明确地处理它,因为它实际上只存在于@isa中。我可以添加一个
Class::MOP 也有同样的局限性。 不是每个模块都要使用自动加载,但它也不是一个晦涩或罕见的功能。如果您不介意丢失某些方法,那么class::inspector或class::mop可能是正常的。它不会给你一个列表,列出在任何情况下你都可以调用一个类或对象的每个方法。 如果您有一个类或对象,并且希望知道是否可以调用特定的方法,请使用can()。将它包装在eval块中,这样可以对甚至不是对象的对象调用can()来返回false,而不是死亡,在这些情况下:
|
![]() |
3
5
在一般情况下,您必须检查符号表(除非您使用驼鹿)。例如,要列出在
散列
要扩展它以包含继承的方法,必须递归地搜索父类的符号表。(
下面是一个完整的例子:
有关包和符号表的详细信息,请参见 perlmod 人页。 |
![]() |
4
3
取决于您的意思是,任何类,或者您是否正在实现自己的类。对于后者,我使用 Moose 为这些功能提供了非常清晰的语法。从食谱中:
|
![]() |
5
3
您可能需要class::inspector->方法(“your::class”)。 Nuff说。 |
![]() |
6
0
我把这个留着等我忘了再说。这是非常强大的;太糟糕了,它太离经叛道了,以至于大多数Perl程序员都无法体验到它。
|
![]() |
Bananach · Python:修改调用范围中的变量绑定 7 年前 |
![]() |
Ray Toal · 检查时未显示Ruby异常对象中的自定义字段 8 年前 |
![]() |
Rob · 获取Swift中泛型类型的名称(字符串) 10 年前 |
![]() |
dom0 · 正在获取包含类的方法 11 年前 |