如何判断对象是否具有特定的重载方法?

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

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

sub some_sub {...}

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

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

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

回答

overload引擎盖下如何工作的细节没有很好地记录,本IMPLEMENTATION节的第一行是接下来的内容可能会更改 RSN。所以你不能依赖检查符号表。

但是,该模块确实提供了一种方法来查看运算符是否为对象重载:

重载::方法(对象,操作)

返回undef或引用实现 的方法op

所以你可以使用

if (overload::Method($someobj, '&{}')) {
    # Overloaded sub deref
}


以上是如何判断对象是否具有特定的重载方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>