+ -
当前位置:首页 → 问答吧 → perl oop 问题

perl oop 问题

时间:2011-08-11

来源:互联网

小弟在用perl OOP程序的时候遇到一点问题。
程序大概意思是有两个类,dot和line。dot里有X和Y两个变量。line有一个dot的array。
问题是我怎么能让line里的变量识别出是dot的对象?

希望高手指点迷津。

这是代码:
dot.pm
#!/usr/bin/perl
package dot;
use strict;

sub new
{
my $class = shift();
print("CLASS = $class\n");
my $self = {};
$self->{_X} = shift();
$self->{_Y} = shift();
bless $self,$class;
return $self;
}

sub printdot
{
my $self = shift();
print "X:".$self->{_X}."; Y:".$self->{_Y}."\n";
return $self;
}
1;

line.pm
#!/usr/bin/perl
package line;
use strict;
use dot;

sub new
{
my $class = shift();
print("CLASS = $class\n");
my $self = {};
$self->{_DOTS} = ();
bless $self,$class;
return $self;
}

sub add
{
my ($self,$dot) = @_;
my @dots = $self->{_DOTS};
push(@dots,$dot);
return $self;
}

1;

test.pl
#!/usr/bin/perl

use dot;
use line;


#testing dot
print "Testing dot...\n";
$d1 = dot->new(0,1);
$d2 = dot->new(2,3);

$d1->printdot();
$d2->printdot();


#testing line;
print "Testing line...\n";
$l = line->new();
$l->add($d1);
$l->add($d2);

@dots = $l->{_DOTS};
foreach $d (@dots) {
$d->printdot();
}

作者: duoduo_uk   发布时间: 2011-08-11

1. 贴代码格式化过再贴。不然没法看。
2. 尽量使用duck typing。你不必管一个对象是不是dot。只要它提供了和dot一样的功能,就可以当作dot来使用。
3. 使用ref获取一个对象的类型。

作者: iambic   发布时间: 2011-08-11

重新编辑过。见谅!

小弟在用perl OOP程序的时候遇到一点问题。
程序大概意思是有两个类,dot和line。dot里有X和Y两个变量。line有一个dot的array。
问题是我怎么能让line里的变量识别出是dot的对象?

希望高手指点迷津。

这是代码:
dot.pm
Perl code

#!/usr/bin/perl
package dot;
use strict;

sub new
{
my $class = shift();
print("CLASS = $class\n");
my $self = {};
$self->{_X} = shift();
$self->{_Y} = shift();
bless $self,$class;
return $self;
}

sub printdot
{
my $self = shift();
print "X:".$self->{_X}."; Y:".$self->{_Y}."\n";
return $self;
}
1;



line.pm
Perl code

#!/usr/bin/perl
package line;
use strict;
use dot;

sub new
{
my $class = shift();
print("CLASS = $class\n");
my $self = {};
$self->{_DOTS} = ();
bless $self,$class;
return $self;
}

sub add
{
my ($self,$dot) = @_;
my @dots = $self->{_DOTS};
push(@dots,$dot);
return $self;
}

1;



test.pl

Perl code

#!/usr/bin/perl

use dot;
use line;


#testing dot
print "Testing dot...\n";
$d1 = dot->new(0,1);
$d2 = dot->new(2,3);

$d1->printdot();
$d2->printdot();


#testing line;
print "Testing line...\n";
$l = line->new();
$l->add($d1);
$l->add($d2);

@dots = $l->{_DOTS};
foreach $d (@dots) {
$d->printdot();
}





作者: duoduo_uk   发布时间: 2011-08-11

热门下载

更多