使用AI :: Pathfinding :: AStar CPAN模块在Perl中“找不到对象方法“新” [...]”

时间:2018-09-26 15:12:16

标签: perl oop new-operator

这是我在Perl中做的第一件事,因此,如果问题有点愚蠢,请原谅我。

我想尝试一下A *寻路算法。我找到了AI::Pathfinding::AStar CPAN模块,基本上是想使给定的示例正常工作。

首先,我将示例分成两个文件,因为我无法弄清楚如何使use My::Map::Package;在单个文件中适用于所有内容。我提出了以下两个文件:

MyAstar.pm:

package MyAstar;
use warnings;
use strict;
use base "AI::Pathfinding::AStar";

my %NODES = get_all_nodes();
sub get_all_nodes {...}
sub getSurrounding {...}

main.pl:

#!/usr/bin/env perl

package main;
use lib '/home/foo/astar/';
use warnings;
use strict;
use MyAstar;

my $map = MyAstar->new or die "No map for you!";
my $path = $map->findPath(1, 5);
print join(', ', @$path), "\n";

执行main.pl时出现以下错误:

  

在包main.pl的第9行中无法通过包“ MyAstar”找到对象方法“ new”。

我不确定这是什么问题。我本来希望在new包中有一个名为AI::Pathfinding::AStar的子例程,但是找不到它。 CPAN模块是否损坏或我做错了什么?

1 个答案:

答案 0 :(得分:2)

您尝试调用一个函数(MyAstar->new,通常用作构造函数),但未定义它。 Perl中没有默认的构造函数(例如在Java中)。

向您的MyAstar.pm添加类似内容:

sub new {
    my $class = shift;
    my $self = bless{}, $class;
    # initialize $self here as needed, maybe using any passed arguments in @_
    return $self;
}