如何设置初始值?这就是我所做的,但我没有得到正确的输出。
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文件中,我创建了这样的对象:
我的$obj=new vehicle();
然后当我调用一个显示变量的函数时,它会给我null。
答案 0 :(得分:3)
您的示例代码中缺少很多内容。我们假设你有这个
(请注意,尽管它会起作用,但此代码错误,因为它使用的是全小写的包名。这些标识符是为 Perl pragmas 保留的,如{{ 1}},=tbl.CalculateColumn(C23,"Result", fn.FixInput("(fn, tbl) => tbl.Filter(tbl, 'tier_info2', fn)", "='SPOT2'"))
,strict
,warnings
等。)
open
feature
然后输出是您可能期望的
package vehicle;
use strict;
use warnings;
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;
}
1;
但是在路上你可能遇到很多错误。您最有可能以与文件名不同的方式命名包。包名称 必须 与use strict;
use warnings 'all';
use vehicle;
my $obj = new vehicle();
use Data::Dump;
dd $obj;
语句匹配,并且必须调用该文件bless({
Angle => 0,
CC => 0,
Color => 0,
Cost => 0,
CurrentSpeed => 0,
RegNo => 0,
TopSpeed => 0,
Wheels => 0,
}, "vehicle")
请注意,您应该正确使用CamelCase作为软件包及其文件名,因此它在use
和名为<package name>.pm
的文件中,您可以在代码中使用package Vehicle
需要它
除非您显示所有模块文件
,否则无法看到确切的问题
表单Vehicle.pm
称为 间接对象语法 。它在perldoc perlobj中记录了
在文件句柄的情况下,不鼓励使用此语法,因为它可能会混淆Perl解释器。有关详细信息,请参见下文。
引用&#34;文件句柄案例&#34;是指use Vehicle
,这是一种常见的用法,它不能被弃用。它相当于my $object = new Class()
,其中print FILEHANDLE LIST
是IO::Handle
对象
然而,FILEHANDLE->print LIST
和FILEHANDLE
是不可取的,new CLASS LIST
确定了原因。虽然它可能看起来更整洁,而且更像您使用过的其他语言,但您应该坚持使用new OBJECT LIST
和perlobj
答案 1 :(得分:0)
很难确定,因为您没有向我们展示用于显示属性的功能。但这很有效(代码中的风格变化很小):
# In Vehicle.pm
package Vehicle;
use strict;
use warnings;
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;
}
sub current_speed {
return shift->{CurrentSpeed};
}
1;
在你的程序中(我称之为vehicle
):
# In vehicle
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Vehicle;
my $v = Vehicle->new;
say $v->current_speed;
然后,运行vehicle
:
$ perl vehicle
0
这似乎是正确的。