在下面的哈希值中,这个祝福意味着什么,以及如何解除它的引用?
'limit' => bless( {
'days' => 2,
'minutes' => 0,
'months' => 0,
'nanoseconds' => 0,
'seconds' => 0
}),发布于 2020-06-10 19:12:02
bless是Perl面向对象编程机制的核心部分,如perldoc bless和perldoc perlobj中所述。
问题中的语句存在于包中;在源文件中查看它上方的行package SomeName,找出它是哪个包的一部分。如果没有package语句,则默认情况下它是package main的一部分,但如果使用bless,基本上不应该出现这种情况。
在核心Perl中,包和OO类或多或少是同义词,而对象只是被声明为该类/包的成员的引用。bless是用于进行该声明的命令。
(有许多功能更全的面向对象框架,例如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 MyClassblessed引用仍然可以被解除引用,其内容的访问方式就像它没有被blessed一样,但通常更可取的做法是使用由类定义的方法,而不是直接进入内部。例如,使用上面的示例代码,使用$var->show_foo获取$var的foo属性的值将比使用$var->{foo}更好,尽管这两种方法都可以工作。
https://stackoverflow.com/questions/62300652
复制相似问题