gpt4 book ai didi

perl - 如何判断一个对象是否有特定的重载方法?

转载 作者:行者123 更新时间:2023-12-04 02:28:29 26 4
gpt4 key购买 nike

我想检查一个对象在 perl 中是否有特定的重载方法——例如,如果它有一个子解引用重载,它会像这样定义:

use overload
'&{}' => \&_some_sub;

sub some_sub {...}

如果我转储创建相关对象的包的符号表,我会看到以下内容:

[
"new",
"import",
"((",
"(&{}",
"ISA",
"__ANON__",
"BEGIN",
]

在符号表中找到 (&{} 总是 是否意味着存在子 deref 方法?它是否也适用于其他重载(我看到 (“” 如果我重载字符串化)。

最佳答案

关于 overload 如何在幕后工作的细节没有很好地记录,并且 IMPLEMENTATION 的第一行部分是以下内容可能会更改 RSN。因此您不能依赖于检查符号表。

但是,该模块会执行 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 - 如何判断一个对象是否有特定的重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65714726/

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