Perl Classes, what is with Blessing Hashes?
我不明白为什么一个Perl构造函数需要所有这些好处,为什么它总是用一个散列来完成(显然,使用其他变量类型是可能的)。
当我创建一个类的新实例时,一个构造函数将如何返回对散列的幸运引用呢?我可以理解"return(this);"或者这些行中的一些内容,但是返回一些其他随机变量只会让我感到困惑(特别是当您应该使用哈希时)。
1 2 3 4 5 6 |
好的,我有这门基础课。我可以在初始化类变量时设置它,然后像$var::localvar那样使用它。但要让它在Perl中实际编译和工作,我需要在"returnbess,shift;"一行中添加内容。你说什么?
似乎这个散列被用作该类的实例,方法是相当静态的。但是你仍然可以有类变量。听起来您只是在将数据对象链接到将该对象作为参数的方法列表。但我不知道为什么每一个教程都意味着,如果这是所有的事情,你总是使用哈希。我很困惑为什么你有这个哈希表和你在课堂上声明的任何"我们的",它们看起来像互相排斥的概念?
It sounds like you are just linking a data object to a list of methods that take that object as a argument.
这就是OO,是的。从构造函数返回的是实例。与其他一些语言不同的是,该语言在后台创建了一个新的"对象实例",而您的构造函数只是负责填充槽,在Perl中,您的构造函数方法可以完成整个工作。
But I am not sure why every tutorial would imply that you always use a hash if that was all that was happening.
类可以是任何类型的引用,但哈希引用是最有用和最方便的,因为哈希具有命名槽,所以您可以按名称引用对象的属性。有一些例子,例如globref对象(filehandles和sockets)、arrayref对象(很少,当作者非常关心速度和内存使用时,通常用于只有几个字段的对象)和scalarref对象(通常用于封装某些C库返回的指针)。但是hashref对象是"标准"的。
I can set a class variable when I initialize it and then later use it like ?var::localvar.
但你为什么要这么做?类变量几乎是完全无用的,在你掌握了更基本和有用的东西之前,没有理由去麻烦它们。
How does it make any sense that a constructor would return a blessed reference to a hash when I create a new instance of a class?
如果不返回所创建的对象,它将是一个相当无用的构造函数。
I could understand"return (this);" or something along those lines
那么,困惑是什么呢?这正是你应该回去的地方。(除本公约称之为
1 2 3 4 5 6 7 |
It seems that this hash is sort of used as the instance of that class,
幸运散列是该类的实例,也就是对象。
评论中的问题Why do I have to [do
my $self = bless({}, $class); ] instead of just referencing the class instance. Like:$self = bless($class)
通过将这两个变量分开,您可以选择为对象使用不同的基变量。例如,io::socket::inet使用一个glob而不是散列。
But most objects anyone would make would have no use for a hash in my opinion. A hash is a pretty specific data structure that is not needed or helpful for 99% of coding.
重点不是使用哈希表;而是使用关联数组(其中每个元素都是一个属性)。
在远超过1%的编码中,关联数组(散列表或其他)都是"必需的和有用的"。