我是Perl的新手(刚刚开始阅读它),我正在努力建立一个Point
课程。我可以设置并获取x
或y
,但我想创建一个名为random
的函数,当它被调用时,它会计算一个随机x
和y
然后设置x
和y
。我在做什么不起作用。我需要做什么?我将从tutorialspoint中删除一个教程,他们使用的示例是一个人。所以如果这不是普通的Perl代码风格,那就是原因。
use strict;
use warnings;
#class name
package Point;
#constructor
sub new
{
my $class = shift;
my $self = {
};
bless $self, $class;
return $self;
}
sub getX{
my($self) = @_;
return $self->{_x};
}
sub getY{
my($self)= @_;
return $self->{_y};
}
sub setX{
my ($self, $x) = @_;
$self->{_x} = $x if defined($x);
return $self->{_x};
}
sub setY{
my ($self, $y) = @_;
$self->{_y} = $y if defined($y);
return $self->{_y};
}
sub random{
my $range = 50;
my $randomX = int(rand($range));
my $randomY = int(rand($range));
my $self->{_x} = $randomX;
my $self->{_y} = $randomY;
return $self->{_x}, $self->{_y};
}
1;
答案 0 :(得分:0)
您试图通过将$self
放在其前面来重新声明my
:
my $self->{_x} = $randomX;
my $self->{_y} = $randomY;
事实上,你应该对此发出警告:
“my”变量$ self屏蔽同一范围内的早期声明
修正该警告后,您将收到以下错误:
全局符号“$ self”需要显式包名(你忘记了吗? 宣布“我的自我”?)
那是因为方法接收类的实例作为它们的第一个参数,但你没有分配它:
my $self = shift;
总而言之,我们有以下变化:
sub random {
my $self = shift;
my $range = 50;
$self->{_x} = int(rand($range));
$self->{_y} = int(rand($range));
return ($self->{_x}, $self->{_y});
}
测试:
use Data::Dumper;
my $p = Point->new;
print Dumper($p->random);
输出:
$VAR1 = 23;
$VAR2 = 49;