Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何初始化新对象的内容_Perl - Fatal编程技术网

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