2009-04-03 8 views
7

Sto lavorando su un semplice codice orientato agli oggetti in MATLAB. Sto cercando di chiamare uno dei miei metodi di classe senza argomenti di input o output nella sua definizione. DefinizionePerché ottengo un errore "Troppi argomenti di input" quando non ne passo?

Funzione:

function roll_dice

chiamata di funzione:

obj.roll_dice;

Quando questo viene eseguito, MATLAB dice:

??? Error using ==> roll_dice 
Too many input arguments. 

Error in ==> DiceSet>Diceset.Diceset at 11 
obj.roll_dice; 
(etc...) 

Qualcuno ha qualche idea quello che potrebbe essere causando io t? Ci sono degli argomenti automatici segreti. Non sono consapevole che sto passando?

risposta

13

Quando si effettua la chiamata:

obj.roll_dice; 

Esso è in realtà equivale a:

roll_dice(obj); 

Così obj è il "segreto" argomento automatica di essere passato a roll_dice. Se si riscrive il metodo roll_dice per accettare un singolo argomento di input (anche se non lo si utilizza), le cose dovrebbero funzionare correttamente.

In alternativa, se si è certi che il metodo roll_dice non eseguirà alcuna operazione sull'oggetto classe, è possibile dichiararlo come Dan suggests come static method.

Per ulteriori informazioni sulla programmazione orientata agli oggetti in MATLAB, here's a link to the online documentation.

+0

Ie, roll_dict viene chiamato come metodo su un oggetto quando non dovrebbe essere. Prova roll_dice() invece di obj.roll_dice(). –

+0

Potrebbe funzionare, ma ha detto che roll_dice è un metodo di classe, quindi suppongo che sia destinato a funzionare su un determinato oggetto. – gnovice

+0

Avevi ragione, ma ora ho un problema diverso. Vengo da lingue come Java e PHP, dove è abbastanza semplice usare le classi. Qual è l'equivalente di self.roll_dice o this.roll_dice? – farr

3

Credo che si possa anche aggirare questo dichiarando che roll_dice è un metodo statico.

+0

+1: Sì, se roll_dice è un metodo statico allora obj.roll_dice dovrebbe funzionare senza bisogno di aggiungere alcun argomento di input alla definizione della funzione. – gnovice

Problemi correlati