你好Perl用户,
我想把几个Perl类从a card game移到Class :: Struct,因为1)我想在我的类中进行一些类型检查,2)Damian Conway是模块作者之一那个男人很棒(看到他在10年前的Perl会议上发言)。但我想知道,如何用以下类中的构造函数解决3个问题:
package User;
our %Users;
our $LobbyPos = 0;
# the bit positions for the recently changed fields
use constant MOUNT => 1 << 0;
use constant POOL => 1 << 1;
use constant WHIST1 => 1 << 2;
use constant WHIST2 => 1 << 3;
sub new {
my $pkg = shift;
my $id = shift;
my $auth = shift;
my $user = {
ID => $id,
AUTH => $auth,
LOBBY_POS => (++$LobbyPos % 3),
# NAME, NICK, INFO will be updated later by login()
NAME => $id,
NICK => $id,
INFO => sprintf('id="%s"', $id),
CHAT => [],
KIB => undef,
GAME => undef,
CHILD => undef,
SEAT => 0,
HAND => {},
HAND_STR => '',
NTRIX => 0,
ALLOWED => [],
BID => 0,
BID1 => 0,
CARD => undef,
LAST_READ => time(),
TIMER => undef,
PREV => [],
BACK => 0,
AGREE => 0,
REVEAL => 0,
ONEMORE => 0,
MONEY => 0,
OLD_MONEY => 0,
CHANGED => 0,
MOUNT , [],
POOL , [],
WHIST1 , [],
WHIST2 , [],
STATS_PASS => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
STATS_MISERE => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
STATS_LUCK => [0, 0, 0, 0, 0, 0, 0],
STATS_GAME => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
STATS_MATCH => [0, 0, 0, 0],
};
$Users{$id} = $user;
bless($user, $pkg);
}
问题1:我的新收到2个参数 - $ id和$ auth - 它们用于启动多个成员。我可能知道如何通过查看perldoc类中的示例3来解决它:结构。
问题2:我使用全局变量$ LobbyPos设置另一个成员,并将另外一个成员设置为epoch秒time()
问题3:我的对象中有4个数字成员MOUNT,POOL,WHIST1,WHIST2。可能没有办法继续使用它们 - 一旦我开始使用Class :: Struct?
任何评论(尤其是问题2 - 因为我有更多的类使用全局变量来在其构造函数中设置成员)是受欢迎的,
谢谢! 亚历
答案 0 :(得分:8)
Class :: Struct十年来一直没有更新。我很确定它只是仍然包含在Perl核心中以实现向后兼容性。我真的不建议这些天任何人都将代码移植到Class :: Struct。
相反,我强烈建议您调查将代码移至Moose。 Moose是Perl中OO编程的未来。