"Не удается найти метод объекта" new "[...]" в Perl с использованием CPAN-модуля AI :: Pathfinding :: AStar - PullRequest
0 голосов
/ 26 сентября 2018

Это первая «серьезная» вещь, которую я делаю в Perl, поэтому, пожалуйста, извините меня, если вопрос несколько глупый.

Я хотел поиграть с алгоритмом поиска пути A *.Я нашел модуль CPAN AI :: Pathfinding :: AStar и в основном пытаюсь заставить данный пример работать.

Прежде всего, я разделил пример на два файла, потому что я не могНе могу понять, как заставить 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, я получаюследующая ошибка:

Не удается найти метод объекта "новый" через пакет "MyAstar" в строке main.pl 9.

Я не уверен, в чем проблемаэто здесь.Я ожидал, что в пакете AI::Pathfinding::AStar есть подпрограмма с именем new, но не смог ее найти.Модуль CPAN неисправен или я что-то не так делаю?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы пытаетесь вызвать функцию (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...