【发布时间】:2016-03-05 17:11:07
【问题描述】:
当调用 perl 构造函数时,类引用被传递给新函数,但构造函数不会像 java 或 c++ 那样初始化类变量。相反,它会创建一个新的 Hash 并在类引用中祝福它并返回它。这会创建子程序不能直接引用变量的问题,他们必须使用传递的隐式引用。
以下代码将突出显示该问题:-
package foo;
use strict;
my $var1;
my $var2;
my $var3;
sub new {
my $class = shift;
my $self = {
var1 => shift,
var2 => shift,
var3 => shift
};
bless $self, $class;
return $self;
}
sub method {
my $self = shift;
print(
"variable value are $self->{var1},$self->{var2},$self->{var3}";
#how to directly refer to var1 declared above? instead of self->{var1}
}
很明显,封装方法必须使用引用 self 才能使用 var1,var2,var3 这不是包变量,而只是散列的对象。
1:-这意味着在perl中没有办法初始化包变量?? 2:-如果我用某种方法显式地初始化它们,它们是对所有对象都有一个副本还是每个对象都有不同的副本
【问题讨论】:
-
在 Perl 中就是这样。包作用域变量类似于 Java 中的类变量。 - Perl 发行版中有几个 OO 教程。为初学者阅读这些内容。
-
示例代码已损坏。它有不平衡的大括号,并且有
new方法调用new方法。如果代码更清晰,可能会更容易理解这个问题。 -
是的,更正了!!!谢谢
标签: perl class-variables