当调用perl构造函数时,类引用被传递给新函数,但构造函数不初始化类变量,如java或C++ does.inf它创建一个新的哈希和祝福它在类的引用并返回它。这造成了子例程不能直接引用它们必须使用传递的隐式引用的变量的问题。为什么perl构造函数不初始化包(class)变量
下面的代码将突出问题: -
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}
}
明确包装方法有可能使用参考自使用VAR1,VAR2,VAR3 这是不是包变量,但只有哈希的对象。
1: - 这意味着在perl中没有办法初始化包变量? 2: - 如果我用某种方法明确初始化它们,他们是否有一个副本用于所有对象或每个对象有不同副本
这就是它在Perl中的样子。包范围变量就像Java中的类变量。 - Perl发行版中有几个OO教程。阅读这些初学者。 – laune
示例代码已损坏。它具有不平衡的大括号,并有'new'方法调用'new'方法。如果代码更清晰,理解这个问题可能会更容易。 – mob
yeah纠正了!!!谢谢 –