【问题标题】:How do I get the type of a blessed ref? (ARRAY|HASH|SCALAR)我如何获得祝福裁判的类型? (数组|哈希|标量)
【发布时间】:2010-11-01 16:19:20
【问题描述】:

我收到了一个引用,我想知道它的类型。以此目的, “ref”适用于未受祝福的引用,但在受祝福的引用上它会返回 它被祝福的包名。

     $a=[];
     print ref $a;

数组

     bless $a, 'mytype';
     print ref $a;

我的类型

如何获取类型?

【问题讨论】:

标签: perl


【解决方案1】:
use Scalar::Util 'reftype';
print reftype bless {}; # HASH

【讨论】:

  • 学究式地使用 Scalar::Util 1.01 'reftype';由于 reftype 是在不到 10 年前添加的,一些可怜的灵魂可能缺少它。
【解决方案2】:

您可以为此使用 Scalar::Util::reftype,但通常这不是您需要做的事情。通常问这个问题的人表明他们正在以不太理想的方式做其他事情。那么,为什么你认为你需要知道呢?

【讨论】:

  • 这是真的。一旦你祝福了某事,你就不应该直接访问底层数据。 (不过,如果你是 Data::Dumper 或 Data::Visitor 之类的,有时这样做还是有用的。)
  • 我知道我在做什么;即,实现类似于 Data::Dumper 的东西,但采用特定格式。
  • 您应该在可以调用的对象上实现一个 dump() 方法,该方法将执行类似 Data::Dumper 的活动并将类型感知代码锁定在模块内。
  • 不,他应该使用 Data::Visitor。
【解决方案3】:

如上面评论中所述.. 如果您认为外部代码需要了解受祝福对象的实现细节,那么您是不正确的。如果您需要对对象执行 Data::Dumper 之类的操作,请在包含实现逻辑的模块上创建一个 dump() 方法。您可以在 UNIVERSAL 类的自动加载器中添加一些代码,以便在您尝试对未定义它的对象调用 dump() 时它只调用 Data::Dumper。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2010-09-05
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多