相关疑难解决方法(0)

使用"isa"方法的最佳方法是什么?

什么是可靠地使用"isa()"的"最佳"方式?换句话说,它可以在任何值上正确工作,而不仅仅是一个对象.

"最佳",我的意思是缺乏未处理的角落案例以及缺乏潜在的性能问题,因此这不是一个主观问题.

这个问题提到了两种似乎可靠的方法(请注意,UNIVERSAL::isa()不应该使用旧式,并且在Q的答案中有充分记录的原因):

eval { $x->isa("Class") }
#and check $@ in case $x was not an object, in case $x was not an object

use Scalar::Util 'blessed';
blessed $x && $x ->isa($class);
Run Code Online (Sandbox Code Playgroud)

第一个使用eval,第二个使用B::(至少对于Scalar :: Util的非XS风味).

如果$x是包含类名的标量,第一个似乎不能正常工作,如下图所示,所以我倾向于#2(使用blessed),除非somoene指出一个很好的理由不这样做.

$ perl5.8 -e '{use IO::Handle;$x="IO::Handle";
  eval {$is = $x->isa("IO::Handle")}; print "$is:$@\n";}'          
1:
Run Code Online (Sandbox Code Playgroud)

有没有客观的理由选择这两种方法中的一种(或者我不知道的第三种方法),如性能,不处理某些特殊情况等等?

perl isa

14
推荐指数
4
解决办法
6338
查看次数

标签 统计

isa ×1

perl ×1