祝福在 perl 中的哈希值是什么意思?



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

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

bless是Perl面向对象编程机制的核心部分,如perldoc blessperldoc 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
bless

ed 引用仍然可以取消引用,其内容访问方式与未blessed 相同,但通常最好使用类定义的方法,而不是直接进入内部。 例如,使用上面的示例代码,使用$var->show_foo获取$varfoo属性的值比使用$var->{foo}更好,尽管这两种方法都有效。

最新更新