如何判断一个对象是否有特定的重载方法?
How can I tell if an object has a specific overloaded method?
我想检查一个对象在 perl 中是否有特定的重载方法——例如,如果它有一个子解引用重载,它会像这样定义:
use overload
'&{}' => \&_some_sub;
sub some_sub {...}
如果我转储创建相关对象的包的符号 table,我会看到以下内容:
[
"new",
"import",
"((",
"(&{}",
"ISA",
"__ANON__",
"BEGIN",
]
在符号 table 中发现 (&{}
是否总是 意味着存在子解引用方法?它是否也适用于其他重载(如果我重载字符串化,我会看到 (""
)。
关于 overload
如何在幕后工作的细节没有很好的记录,IMPLEMENTATION
部分的第一行是 接下来的内容可能会更改 RSN . 所以你不能依赖于检查符号 table.
但是,该模块会provide a way查看某个对象是否重载了运算符:
overload::Method(obj,op)
Returns undef
or a reference to the method that implements op
.
所以你可以使用
if (overload::Method($someobj, '&{}')) {
# Overloaded sub deref
}
我想检查一个对象在 perl 中是否有特定的重载方法——例如,如果它有一个子解引用重载,它会像这样定义:
use overload
'&{}' => \&_some_sub;
sub some_sub {...}
如果我转储创建相关对象的包的符号 table,我会看到以下内容:
[
"new",
"import",
"((",
"(&{}",
"ISA",
"__ANON__",
"BEGIN",
]
在符号 table 中发现 (&{}
是否总是 意味着存在子解引用方法?它是否也适用于其他重载(如果我重载字符串化,我会看到 (""
)。
关于 overload
如何在幕后工作的细节没有很好的记录,IMPLEMENTATION
部分的第一行是 接下来的内容可能会更改 RSN . 所以你不能依赖于检查符号 table.
但是,该模块会provide a way查看某个对象是否重载了运算符:
overload::Method(obj,op)
Returns
undef
or a reference to the method that implementsop
.
所以你可以使用
if (overload::Method($someobj, '&{}')) {
# Overloaded sub deref
}