首页 > 解决方案 > 使用 AI::Pathfinding::AStar CPAN 模块在 Perl 中“找不到对象方法“new”[...]”

问题描述

这是我在 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 {...}

主要.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 模块是否损坏或我做错了什么?

标签: perloopnew-operator

解决方案


您尝试调用一个函数 ( 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;
}

推荐阅读