Lar*_*ung 2 perl module object
我是Perl的新手,所以我在使用OOP时遇到了一些问题.
我有...
我正在尝试在connect4,pl中使用模块"播放器",但是当我尝试创建模块的实例时,我得到错误:"无法找到对象方法"新"通过包".
我已经阅读了其他帖子,但我不太明白他们的问题是什么以及它是如何修复的......
这是一个片段(我删除了许多行,我只是包含了我认为重要的内容)
use Player;
my $temp_connect_four = Player -> new("parameters");
Run Code Online (Sandbox Code Playgroud)
和
package connect4;
sub new{
#some variables
}
#more methods/subroutines
Run Code Online (Sandbox Code Playgroud)
有什么问题?
你需要有类似的东西:
file:Player.pm
package Player;
use strict;
use warnings;
sub new {
...
}
Run Code Online (Sandbox Code Playgroud)
你的主要脚本connect4.pl
use strict;
use warnings;
use Player;
my $player = Player->new( ... args...);
Run Code Online (Sandbox Code Playgroud)
首先回答了上面的问题,但基于这个事实,你知道如何组织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示例可以像下一个一样编写:
文件: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;
Run Code Online (Sandbox Code Playgroud)
main.pl脚本的文件:
use strict;
use warnings;
use feature 'say';
use Player;
my $player = Player->new(name => 'John', age => 15);
say $player->info();
Run Code Online (Sandbox Code Playgroud)
运行main.pl会产生:
The player John is 15 years old.
Run Code Online (Sandbox Code Playgroud)
如您所见,"Mo"为您提供了一种免费的"新"方法.(还有很多其他的东西).
你真的需要阅读: