7
votes

Méthode de classe MATLAB: Trop d'arguments

J'ai trouvé des questions connexes, mais je n'ai pas vraiment trouvé de réponse là-bas.

J'écris une simple classe MATLAB afin d'apprendre la syntaxe de OOP à Matlab. Je suis très familier avec Python et je tire mes cheveux en essayant de travailler avec Matlab. Voici la définition: p> xxx pré>

Ceci n'est certainement pas fait, mais j'utilise un petit script pour désordre avec l'objet: p>

Error using Car/start
Too many input arguments.


3 commentaires

Je devrais préciser que c'est toujours la même erreur "trop ​​d'arguments d'entrée" pour toute méthode que j'essaie d'appeler un objet.


Quelle version de matlab? Votre code travaille pour moi sur R2011b.


Sh * t ... Je viens d'utiliser la commande Clear, et maintenant ça marche. Devrais-je supprimer cette question?


3 Réponses :


24
votes

Comme je ne peux pas comprendre comment supprimer cette question, je ferai de mon mieux pour y répondre. Comme d'autres langues, la programmation orientée objet dans MATLAB souhaite voir obj comme premier paramètre dans les méthodes de classe (comme auto en python). Cette référence à l'objet est nécessaire pour modifier ses attributs. Je n'incluait pas cela dans les définitions de la méthode, alors quand j'ai appelé la méthode, je recevais une erreur "trop ​​d'arguments". C'est parce que si vous faites foo.method (a, b) , alors l'objet foo est effectivement transmis comme paramètre, de sorte que la fonction fonctionne réellement 3 entrées, c'est-à-dire < Code> Méthode (FOO, A, B) .

J'ai traversé mon code et ajouté obj dans les endroits appropriés, mais n'a pas utilisé la commande Clear dans la fenêtre de commande MATLAB. Depuis que je suis nouveau à Matlab, je n'étais pas au courant de son importance. Je viens de supposer sauver le dossier et la ré-instantanée de ma classe serait suffisante. Ce n'est pas.

J'espère que cela aide toute personne qui rencontre cette question.


0 commentaires

0
votes

Vous avez répondu à votre propre question qui est géniale. Mais, il semble que votre question inclut le code même que vous avez lutté pour être exécuté au début. J'aurais pensé que votre code au début ressemblait à: xxx pré>

et, seulement plus tard, devenez ce que vous avez écrit dans votre question: p>

classdef Car < handle


    properties
        speed = [0,0]   %x,y velocity
        position = [0,0]
        running = false

    end

    methods
        function obj = Car(obj,pos, spd)
            obj.position = pos;
            obj.speed = spd;
        end

        function accelerate(obj,x,y)    % Add to speed
            obj.speed = obj.speed + [x,y]
        end

        function position = getPosition(obj)
            position = obj.position
        end

        function start(obj)
            obj.running = true
        end

        function stop(obj)
            obj.running = false
        end
    end

end


0 commentaires

1
votes

Vous n'avez pas besoin de transmettre l'OBJ à l'entrée si vous déclarez les méthodes en tant que statique:

classdef class1
    methods (Static)
        function y=aPLUSb(a,b)
            y=a+b;
        end
    end
end


0 commentaires