2016-07-22 24 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'中。將它們分開 –

相關問題