【问题标题】:What does bless means in hash value in perl? [duplicate]perl中hash值的bless是什么意思? [复制]
【发布时间】:2020-09-29 16:42:13
【问题描述】:

这个bless在下面的hash值中是什么意思,如何解引用?

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

【问题讨论】:

标签: perl hash bless


【解决方案1】:

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 相同,但通常最好使用类定义的方法而不是直接进入胆量。例如,对于上面的示例代码,使用$var->show_foo 比使用$var->{foo} 获取$var 的foo 属性的值会更好,尽管这两种方法都可以。

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2020-10-27
    • 2015-07-15
    相关资源
    最近更新 更多