如何在Perl中为Point类创建随机函数?

时间:2017-02-16 00:19:48

标签: perl

我是Perl的新手(刚刚开始阅读它),我正在努力建立一个Point课程。我可以设置并获取xy,但我想创建一个名为random的函数,当它被调用时,它会计算一个随机xy然后设置xy。我在做什么不起作用。我需要做什么?我将从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;

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;