1

这个祝福在下面的哈希值中意味着什么,以及如何取消引用它?

'limit' => bless( {
'days' => 2,
'minutes' => 0,
'months' => 0,
'nanoseconds' => 0,
'seconds' => 0
}),
4

1 回答 1

4

bless是 Perl 面向对象编程机制的核心部分,如perldoc bless和中所述perldoc perlobj

问题中的陈述存在于包装内;在源文件中查看它上面的一行,package SomeName以找出它是哪个包的一部分。如果没有package声明,那么它是默认情况下的一部分,但如果正在使用package main的话,基本上不应该是这种情况。bless

在核心 Perl 中,包和 OO 类或多或少是同义词,而对象只是被声明为该类/包成员的引用。 bless是用于进行该声明的命令。

(Perl 有很多功能更全的 OO 框架,比如 Moo 和 Moose,它们在基本blessed 参考模型提供的功能之外增加了一些功能,但是你在使用这样的框架时一般不会bless自己使用,所以我'我假设您正在查看的代码中没有使用这样的框架。)

举一个更具体的例子:

package MyClass;

sub show_foo { my $self = shift; return $self->{foo} }    

my $var = { foo => 'bar' };  # $var is a normal hash reference
bless $var;                  # $var is now an object of type MyClass

一个blessed 引用仍然可以被取消引用,并且它的内容以与没有被blessed 相同的方式访问,但通常最好使用类定义的方法而不是直接进入胆量。例如,对于上面的示例代码,使用 using 获取$var'foo属性的值会$var->show_foo比 with更好$var->{foo},尽管两种方式都可以。

于 2020-06-10T11:12:02.467 回答