2009-04-03 9 views
7

Ich arbeite an einem einfachen objektorientierten Code in MATLAB. Ich versuche, eine meiner Klassenmethoden ohne Eingabe- oder Ausgabeargumente in ihrer Definition aufzurufen.Warum erhalte ich einen "Too many arguments arguments" -Fehler, wenn ich keinen übergebe?

Funktionsdefinition:

function roll_dice

Funktionsaufruf:

obj.roll_dice;

Wenn dies ausgeführt wird, sagt MATLAB:

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

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

Wer irgendwelche Ideen, was sein könnte verursacht i t? Gibt es geheime automatische Argumente, die mir nicht bewusst sind?

Antwort

13

Wenn Sie den Anruf:

obj.roll_dice; 

Es tatsächlich gleichwertig ist:

roll_dice(obj); 

So obj ist das "Geheimnis" automatische Argument roll_dice geleitet wird. Wenn Sie die Methode roll_dice neu schreiben, um ein einzelnes Eingabeargument zu akzeptieren (auch wenn Sie es nicht verwenden), sollten die Dinge korrekt funktionieren.

Wenn Sie sicher sind, dass Ihre Methode roll_dice keine Operationen für das Klassenobjekt ausführt, können Sie alternativ dazu eine static method als Dan suggests deklarieren.

Weitere Informationen zur objektorientierten Programmierung in MATLAB, here's a link to the online documentation.

+0

Dh, Roll_dict wird als Methode für ein Objekt aufgerufen, wenn es nicht sein sollte. Versuchen Sie, roll_dice() anstelle von obj.roll_dice(). –

+0

Das könnte funktionieren, aber er hat gesagt, dass roll_dice eine Klassenmethode ist, also vermute ich, dass es für ein bestimmtes Objekt funktionieren soll. – gnovice

+0

Sie hatten Recht, aber jetzt habe ich ein anderes Problem. Ich komme aus Sprachen wie Java und PHP, wo es ziemlich einfach ist, Klassen zu verwenden. Was ist äquivalent zu self.roll_dice oder this.roll_dice? – farr

3

Ich glaube, Sie können dies auch umgehen, indem Sie roll_dice als statische Methode deklarieren.

+0

+1: Ja, wenn roll_dice eine statische Methode ist, dann sollte obj.roll_dice funktionieren ohne dass der Funktionsdefinition Eingabeargumente hinzugefügt werden müssen. – gnovice

Verwandte Themen