gpt4 book ai didi

Perl 类,Blessing Hashes 是什么?

转载 作者:行者123 更新时间:2023-12-01 05:18:14 25 4
gpt4 key购买 nike

我不明白为什么 Perl 构造函数需要所有这些祝福,以及为什么它总是用散列来完成(显然可以使用其他变量类型)。

当我创建一个类的新实例时,构造函数返回对哈希的祝福引用有什么意义?我能理解“返回(这个);”或类似的东西,但返回一些其他随机变量只是让我感到困惑(特别是当你应该使用哈希时)。

my ?var = new Test("foo");
package Test;
our $localvar;
sub new{
localvar = $_[1];
}

好的,所以我有这个基础类(class)。我可以在初始化时设置一个类变量,然后像 $var::localvar 一样使用它。但是要让它在 Perl 中实际编译和工作,我需要在行中添加“return bless {}, shift;”???

似乎这个哈希被用作那个类的实例,方法是相当静态的。但是您仍然可以拥有类变量。听起来您只是将数据对象链接到以该对象作为参数的方法列表。但我不确定为什么每个教程都暗示你总是使用哈希,如果这就是发生的一切。我很困惑为什么你有这个哈希和你在类里面声明的任何“我们的”,它们似乎是相互排斥的概念?

最佳答案

It sounds like you are just linking a data object to a list of methods that take that object as a argument.



这正是面向对象的含义,是的。你从构造函数返回的东西是实例。与其他一些语言不同,这些语言在幕后创建一个新的“对象实例”,而您的构造函数只负责填充插槽,在 Perl 中,您的构造函数方法可以完成整个工作。 {}创建对新匿名哈希的引用,该哈希将成为对象的存储,并且 bless是通过用您的类名标记它来实际将该引用转换为一个对象。

But I am not sure why every tutorial would imply that you always use a hash if that was all that was happening.



类可以是任何类型的引用,但散列引用是最有用和最方便的,因为散列具有命名槽,因此您可以通过名称引用对象的属性。有 globref 对象(文件句柄和套接字)、arrayref 对象(很少见,当作者非常关心速度和内存使用时通常用于只有几个字段的对象)和 scalarref 对象(通常用于封装一个某些 C 库返回的指针)。但是 hashref 对象是“标准的”。

I can set a class variable when I initialize it and then later use it like ?var::localvar.



但你为什么要这样做?类变量几乎完全没有用,在您掌握更基本和更有用的东西之前,没有理由打扰它们。

关于Perl 类,Blessing Hashes 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14906814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com