7

我想检查 a$thing是否是作为包祝福的对象(例如__PACKAGE__)。一个想法是:

use Scalar::Util qw(blessed);

defined blessed $thing && blessed $thing eq __PACKAGE__

有没有更好和/或更优雅的方法来避免检查是否定义了返回值blessed

另一种方法是(blessed $thing or '') eq __PACKAGE__,但我不确定一个包裹是否可以合法地为空。

此外,基于Perl MonksUNIVERSAL::isa($thing, __PACKAGE__)另一种方式,但这种方式允许更多的东西。

4

2 回答 2

11

您可以使用预定义的ref功能

ref($thing) eq __PACKAGE__

也就是说,我认为更宽松isa的做法确实是更好的做法。您通常不需要检查对象的类型是否完全正确

[...] 我不确定一个包裹是否可以合法地为空。

这不可以。(顺便说一句,如果你试图祝福一个对 的引用'',它实际上会被祝福到main.Perl 会警告你这一点,只要你有-wuse warnings。)

于 2014-02-24T06:30:11.783 回答
4

使用Safe::IsaCPAN 中的模块:

$possible_object->$_isa('DateTime')
于 2014-03-04T22:51:58.140 回答