perl - 使用 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 模块是否损坏或我做错了什么?
解决方案
您尝试调用一个函数 ( 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;
}
推荐阅读
- java - Jsp包括不工作:找不到文件,状态500
- php - Disable auto hashing of password while login - Laravel
- amazon-web-services - 修复 Amazon Cognito - 使用 Apple 登录 - “提供了无效状态/中继状态”
- java - Java 处理 Spring Data 本机查询投影中的 NPE
- mysql - 排序顺序 SQL 表
- java - TarArchiveOutputStream 未归档隐藏文件
- node.js - 使用 https 我如何对未定义的状态代码进行条件化?
- c# - Linq to Xml C#在特定元素中查找特定元素
- xcode - Xcode项目中可编辑的Swift包?
- mongodb - $或文档中数组的特定元素的属性