Perl 如何判断对象是否具有特定的重载方法?
我想检查一个对象在perl中是否有一个特定的重载方法-例如,如果它有一个子去引用重载,它的定义如下:Perl 如何判断对象是否具有特定的重载方法?,perl,Perl,我想检查一个对象在perl中是否有一个特定的重载方法-例如,如果它有一个子去引用重载,它的定义如下: use overload '&{}' => \&_some_sub; sub some_sub {...} 如果我转储创建相关对象的包的符号表,我会看到以下内容: [ "new", "import", "((", "(&{}", "ISA&quo
use overload
'&{}' => \&_some_sub;
sub some_sub {...}
如果我转储创建相关对象的包的符号表,我会看到以下内容:
[
"new",
"import",
"((",
"(&{}",
"ISA",
"__ANON__",
"BEGIN",
]
在符号表中查找
(&{}
总是意味着存在子排序方法吗?它是否也适用于其他重载(我看到(“
如果我重载字符串化).关于过载
如何在引擎盖下工作的详细信息没有很好的记录,本节的第一行是以下内容可能会发生变化的RSN。因此,您不能依赖于检查符号表
但是,模块会检查对象的运算符是否重载:
重载::方法(obj,op)
返回undef
或对实现op
的方法的引用
所以你可以用
if(重载::方法($someobj,&{}')){
#超负荷子指令
}
回退是否重要?例如,如果对象重载了0+
并启用了回退,那么即使没有显式重载+
,-
等,也会自动允许大多数数字运算符工作。