我是Perl的新手,所以我在使用OOP时遇到了一些问题。
我有......
我正在尝试在connect4,pl中使用模块“播放器”,但是当我尝试创建模块的实例时,我得到错误:“找不到对象方法”new“via”。
我已阅读过其他帖子,但我不太明白他们的问题是什么以及它是如何修复的......
这是一个片段(我删除了许多行,我只是包含了我认为重要的内容)
use Player;
my $temp_connect_four = Player -> new("parameters");
和
package connect4;
sub new{
#some variables
}
#more methods/subroutines
有什么问题?
答案 0 :(得分:8)
你需要有类似的东西:
file:Player.pm
package Player;
use strict;
use warnings;
sub new {
...
}
您的主要脚本connect4.pl
use strict;
use warnings;
use Player;
my $player = Player->new( ... args...);
首先回答了上述情况,但基于这个事实,你知道如何组织perl软件包有问题,恕我直言你需要更多评论,从perl-beginner的角度来看(像我一样)。你可能会从perl-gurus获得更好更准确的答案。
如果你开始用perl,恕我直言学习OO,你应该开始使用CPAN的“Mo”或“Moo”包。它们为您提供了一些不错的“糖”,它极大地帮助您开始在perl中开发面向OO的程序,并允许您稍后将包扩展到Moo?更聪明的兄弟 - > Moose
必须说,这并不意味着你不需要学习perl OO的基本原理。
因为大多数CPAN模块都是在没有Mo?se和许多程序的情况下编写的,所以用传统的perl-OO编写,所以你需要需要学习它,但是(来自我自己的经验)它需要更陡峭的学习曲线。您需要了解包结构,什么是“祝福”等等。使用“Mo”(或Moose)可以帮助您隐藏很多东西,稍后您将学习它们。
使用“Mo”可以帮助您在没有完全理解的情况下获得更快的结果 - 为什么它可以正常工作。 ;)/或许,现在很多perl专家会认为这是一种错误的学习方法。 :)/
使用“Mo”的播放器示例可以写成下一个:
档案:Player.pm
package Player;
use strict;
use warnings;
use Method::Signatures::Simple; # for automatic $self using "method" instead of the "sub"
use Mo;
has 'name';
has 'age';
method info {
return "The player " . $self->name . " is " . $self->age . " years old.";
}
1;
带有main.pl脚本的文件:
use strict;
use warnings;
use feature 'say';
use Player;
my $player = Player->new(name => 'John', age => 15);
say $player->info();
运行main.pl会产生:
The player John is 15 years old.
正如您所看到的,“Mo”为您提供了一种免费的“新”方法。 (以及许多其他事情)。
你真的需要阅读: