【发布时间】:2021-09-06 20:19:42
【问题描述】:
我是 Perl 的新手,我想了解/了解更多关于 OO 部分的信息。 假设我有一个只有属性的“类”;与直接处理哈希相比,创建包和祝福哈希有什么好处/优势?
为简单起见,让我们考虑以下示例:
package Person;
sub new {
my $class = shift;
my $args = {Name => '', Age => 0, @_};
my $self = { Name => $args->{Name},
Age => $args->{Age}, };
bless $self, $class;
}
package main;
my $person1 = Person->new(Name => 'David', Age => 20);
my $person2 = {Name => 'David', Age => 20, Pet => 'Dog'};
print $person1->{Name} . "\n";
print $person2->{Name} . "\n";
我想知道$person1和$person2之间有什么区别,除了OO部分之外,除了1是祝福哈希,2是哈希引用之外?
在这种情况下,使用对象比处理哈希有什么好处吗?
查看答案后:
感谢大家的帮助:)
Håkon Hægland 评论对我来说是最接近的答案, 我只是想知道,考虑到我只需要持有简单的标量,没有特殊检查,没有其他功能,一个类是否比简单的哈希有好处 (我知道如果我需要额外的功能和继承,那么类将是正确的工具)
【问题讨论】:
-
如果你不打算使用方法调用,差别不大。你可以用
$person1做的一件事是通过调用ref $person1来内省它被祝福的类的名称。您还可以安排Person从基类继承属性。 -
您可以使用
Person做的另一件事是提供对其数据属性的访问验证。因此,您将实现一个方法Name(),而不是$person1->{Name},该方法返回$person1->{Name},并且可能会执行一些其他有用的事情,例如日志记录或检查名称是否已定义等等。 -
这能回答你的问题吗? What exactly does Perl's "bless" do?
-
如果您正在学习 perl 中的 OO,您可能应该花时间学习 Moo 或 Moose。 vanilla OO 功能在现代 perl 中并不常用。
-
@ceving 很抱歉没有这么清楚,问题是,Perl 对底层对象的处理方式是否与哈希、任何优化、除了 OO 的好处以及我不知道的东西有什么不同。 , 对于简单的数据对象