【发布时间】:2014-12-05 06:47:46
【问题描述】:
我是perl 的新手,还在perl 中学习oop。我通常在C、C++ 中编码。需要bless一个对象通知perl先搜索那个包里的方法。这就是祝福的作用。然后在-> 的帮助下进行的每个函数调用都将instance 本身作为第一个参数传递。现在我对为新对象编写构造函数有疑问。通常构造函数通常看起来像:
sub new {
my %hash = {};
return bless {%hash}; #will automatically take this package as the class
}
现在我想在我的班级中有两个数据成员,这样我就可以做这样的事情:
sub new {
my %hash = {};
$hash->{"table_header"} = shift @_; #add element to hash
$hash->{"body_content"} = shift @_;
return bless {%hash}; #will automatically take this package as the class
}
我的问题是这是唯一可能的方法。我们不能像C 和C++ 那样拥有多个数据成员,而且我们必须使用像“table_header”和“body_content”这样的字符串。
编辑:
在 C 或 C++ 中,我们可以直接引用数据成员(现在假设它是公共的)。这里有一个额外的参考。我想知道是否有任何方法可以让我们拥有 C 这样的对象。
sub new {
my $table_header = shift @_;
my $body_content = shift @_;
#bless somehow
}
希望这能消除一些困惑。
【问题讨论】:
-
我不明白你的困惑。在 Perl 中,“对象”是一个有福的散列。对象的属性是存储在散列中的值,键是属性名称。您还在寻找什么?
-
你是指带有函数的对象类,还是带有成员的对象类? (即一个提供功能,另一个提供数据)
-
@JimGarrison 请查看编辑。
-
@nrathaus 具有成员(多个成员)的对象类。函数可以是多个。
-
@JimGarrison:Perl 对象是对任何事物的祝福reference。它从不祝福哈希:你不能祝福哈希。