Perl 如何初始化新对象的内容
如何设置初始值?这就是我所做的,但我没有得到正确的输出Perl 如何初始化新对象的内容,perl,Perl,如何设置初始值?这就是我所做的,但我没有得到正确的输出 sub new { my $class=shift; my $self={ Color => 0, Cost => 0, Wheels => 0, CC => 0, RegNo => 0, TopSpeed => 0, CurrentSpeed => 0,
sub new
{
my $class=shift;
my $self={
Color => 0,
Cost => 0,
Wheels => 0,
CC => 0,
RegNo => 0,
TopSpeed => 0,
CurrentSpeed => 0,
Angle => 0,
};
bless $self,$class;
return $self;
}
在.pl文件中,我创建了如下对象:
My$obj=新车()代码>
然后,当我调用一个显示变量的函数时,它给我空值。很难确定,因为您没有向我们显示用于显示属性的函数。但这是可行的(代码的风格变化很小):
在您的程序中(我称之为vehicle
):
然后,运行车辆:
# In vehicle
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Vehicle;
my $v = Vehicle->new;
say $v->current_speed;
$ perl vehicle
0
这似乎是正确的。很难确定,因为您没有向我们显示用于显示属性的函数。但这是可行的(代码的风格变化很小):
在您的程序中(我称之为vehicle
):
然后,运行车辆:
# In vehicle
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Vehicle;
my $v = Vehicle->new;
say $v->current_speed;
$ perl vehicle
0
这似乎是正确的。示例代码中缺少很多内容。假设你有这个
(请注意,尽管它可以工作,但此代码是错误的,因为它使用了全小写的包名。这些标识符是为Perl pragmas保留的,如strict
,warnings
,open
,feature
等。)
下午六时三十分
main.pl
那么输出就是您可能期望的结果
bless({
Angle => 0,
CC => 0,
Color => 0,
Cost => 0,
CurrentSpeed => 0,
RegNo => 0,
TopSpeed => 0,
Wheels => 0,
}, "vehicle")
但是有很多事情你可能会在路上出错。很可能您对包的命名与其文件名不同。包名必须与use
语句匹配,并且必须调用文件.pm
请注意,您应该正确使用CamelCase作为软件包及其文件名,因此在这里它将是软件包车辆
并位于名为Vehicle.pm
的文件中,并且您将在需要它的代码中使用车辆
除非显示所有模块文件,否则不可能看到确切的问题
更新
形式my$object=new Class()
称为间接对象语法。它被记录在它说的地方
在文件句柄之外,不鼓励使用此语法,因为它会混淆Perl解释器。有关详细信息,请参见下文。
“文件句柄案例”指的是打印文件句柄列表
,这是一种常见用法,不能弃用。它相当于FILEHANDLE->print LIST
,其中FILEHANDLE
是一个对象
然而,新类列表
和新对象列表
在其他方面是不可取的,并且perlobj
确定了原因。即使这样看起来更整洁,更像您使用过的其他语言,您也应该坚持使用CLASS->newlist
和OBJECT->newlist
示例代码中缺少很多内容。假设你有这个
(请注意,尽管它可以工作,但此代码是错误的,因为它使用了全小写的包名。这些标识符是为Perl pragmas保留的,如strict
,warnings
,open
,feature
等。)
下午六时三十分
main.pl
那么输出就是您可能期望的结果
bless({
Angle => 0,
CC => 0,
Color => 0,
Cost => 0,
CurrentSpeed => 0,
RegNo => 0,
TopSpeed => 0,
Wheels => 0,
}, "vehicle")
但是有很多事情你可能会在路上出错。很可能您对包的命名与其文件名不同。包名必须与use
语句匹配,并且必须调用文件.pm
请注意,您应该正确使用CamelCase作为软件包及其文件名,因此在这里它将是软件包车辆
并位于名为Vehicle.pm
的文件中,并且您将在需要它的代码中使用车辆
除非显示所有模块文件,否则不可能看到确切的问题
更新
形式my$object=new Class()
称为间接对象语法。它被记录在它说的地方
在文件句柄之外,不鼓励使用此语法,因为它会混淆Perl解释器。有关详细信息,请参见下文。
“文件句柄案例”指的是打印文件句柄列表
,这是一种常见用法,不能弃用。它相当于FILEHANDLE->print LIST
,其中FILEHANDLE
是一个对象
然而,新类列表
和新对象列表
在其他方面是不可取的,并且perlobj
确定了原因。即使这样看起来更整洁,更像您使用过的其他语言,您也应该坚持使用CLASS->newlist
和OBJECT->newlist
不要这样实例化。使用my$obj=vehicle->new()
并打开strict和warnings,因为我很确定new vehicle()
不会正常工作,因为后者不是一个方法,而是一个类。不幸的是,new vehicle()
工作得很好。但不推荐使用,因为它可能相当脆弱vehicle->new()
是一个更好的主意。您显示的代码位没有问题。请发布整个.pm文件,不要这样实例化。使用my$obj=vehicle->new()
并打开strict和warnings,因为我很确定new vehicle()
不会正常工作,因为后者不是一个方法,而是一个类。不幸的是,new vehicle()
工作得很好。但不推荐使用,因为它可能相当脆弱vehicle->new()
是一个更好的主意。您显示的代码位没有问题。请发布整个.pm文件,这是两个独立的源文件吗?是的。我没有意识到如此降价的解析器会像那样将它们一起运行。现在修好了。谢谢,啊!谢谢当你说“然后,运行vehicle
”时,vehicle
就是nam