"Can't locate object method "Perl 中使用 AI::Pathfinding::AStar CPAN 模块的新“[...]”
"Can't locate object method "new" [...]" in Perl using the AI::Pathfinding::AStar CPAN module
这是我在 Perl 中做的第一个 "serious" 事情,所以如果问题有点愚蠢,请原谅我。
我想尝试一下 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 时,出现以下错误:
Can't locate object method "new" via package "MyAstar" at main.pl line 9.
我不确定这里有什么问题。我原以为 AI::Pathfinding::AStar
包中会有一个名为 new
的子程序,但找不到它。是 CPAN 模块坏了还是我做错了什么?
您尝试调用一个函数(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;
}
这是我在 Perl 中做的第一个 "serious" 事情,所以如果问题有点愚蠢,请原谅我。
我想尝试一下 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 时,出现以下错误:
Can't locate object method "new" via package "MyAstar" at main.pl line 9.
我不确定这里有什么问题。我原以为 AI::Pathfinding::AStar
包中会有一个名为 new
的子程序,但找不到它。是 CPAN 模块坏了还是我做错了什么?
您尝试调用一个函数(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;
}