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

如何确定对象是否在Perl中实现了一个方法?

如何解决《如何确定对象是否在Perl中实现了一个方法?》经验,为你挑选了1个好方法。

我有一个实现两个(非正式)接口的多态对象数组.我希望能够通过以下方式区分它们:

if (hasattr(obj, 'some_method')) {
    # `some_method` is only implemented by one interface.
    # Now I can use the appropriate dispatch semantics.
} else {
    # This must be the other interface.
    # Use the alternative dispatch semantics.
}

也许这样的事情有效吗?:

if (*ref(obj)::'some_method') {
    # ...

我很难说出语法何时会尝试调用子例程以及何时返回子例程引用.我不太熟悉包装符号表ATM,我只是试图破解一些东西.:-)

提前致谢!



1> Kent Fredric..:
use Scalar::Util qw(blessed);
if( blessed($obj) and $obj->can('some_method') ){ 

}

"can"这里是UNIVERSAL所有类继承的方法.类可以覆盖此方法,但它不是一个好主意.

此外,"can"返回对函数的引用,因此您可以执行以下操作:

$foo->can('some_method')->( $foo , @args );

要么

my $sub = $foo->can('some_method'); 
$foo->$sub( @args ); 

标量::的Util

perldoc.perl.org上的Perl对象

编辑更新的链语法,感谢Brian Phillips

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