2016-07-22 48 views
0

我一直工作在纸牌游戏中,得到您的甲板上,并挑选出1三张权卡,但每当我尝试运行它,它给了我一个错误被提供了太多的论据;预计1(Perl的)

错误:

Error: In call to CPUser::addCards(), was given too many arguments; it expects 1 at Server/CPUser.pm line 427. 

行427:

if($intItem == 821){ #Adds Card Jitsu Cards for Classic 
      $self->addCards($self->buildStarterDeck); 
     } 

和这个buildStarterDeck方法

method buildStarterDeck { 

    sub get_cards; 
    my (@stackone, @stacktwo) = get_cards; 

    sub get_cards 
    { 
     my @start_cards = (1, 6, 9, 14, 17, 20, 22, 23, 26); 
     my @power_cards = (73, 81, 89); 
     @power_cards = $power_cards[rand @power_cards]; 

    return (@start_cards, @power_cards); 
    } 
} 

addCard方法是空的,因为我一直在试图找出这个错误,我没有得到任何运气。

+0

'方法'从哪里来? – xxfelixxx

+0

什么? Perl使用方法来创建函数... –

+0

哪个版本的perl? – xxfelixxx

回答

4

问题出在您定义的addCards,即使您有多次查看请求,您仍然坚持隐藏我们。它必须是这个样子

method addCards($param) { 
    ...; 
} 

但你通过它在$self->addCards($self->buildStarterDeck)十元列表,以便given too many arguments出现错误。你不解释你想要它做的事情,但这样的事情可能更合适

method addCards(@cards) { 
    ...; 
} 

你真的不应该等子程序内声明的子程序。它不限制内部子程序的范围,但是你可以在外部子程序声明的变量上创建一个闭包,这个变量不能正常工作。

同时要考虑到注释中的zdim's warning,你的代码应该看起来更像这

use strict; 
use warnings 'all'; 

use Method::Signatures; 

method buildStarterDeck { 

    my @stack = get_cards; 
} 

sub get_cards { 

    my @start_cards = (1, 6, 9, 14, 17, 20, 22, 23, 26); 
    my @power_cards = (73, 81, 89); 

    $power_card = $power_cards[rand @power_cards]; 

    return (@start_cards, $power_card); 
} 
+0

那么addCards应该按照以下顺序将卡片列表添加到数据库列'cards'中。将它们分开 –

相关问题