Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matlab Class Method: Too many arguments

I found some related questions, but didn't really find an answer in there.

I'm writing a simple little MATLAB class in order to learn OOP syntax in MATLAB. I'm very familiar with Python, and pulling my hair out trying to work with MATLAB. Here's the definition:

classdef Car < handle


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

    end

    methods
        function obj = Car(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

This is certainly not done, but then I'm using a little script to mess with the object:

foo = Car([1,1],[0,2])
foo.start
foo.accelerate(2,3)

Instantiation works, but ANY method I call throws an error. foo.start, for example:

Error using Car/start
Too many input arguments.

What am I missing??

like image 607
mrKelley Avatar asked May 08 '13 17:05

mrKelley


2 Answers

Since I can't figure out how to delete this question, I'll do my best to answer it. Like other languages, object oriented programing in MATLAB wants to see obj as the first parameter in class methods (like self in python). This reference to the object is necessary to modify its attributes. I was not including this in method definitions, so when I called the method I was getting the "too many arguments" error. That's because if you do foo.method(a,b), then the object foo is actually passed as a parameter, so you function is actually getting 3 inputs, i.e. method(foo,a,b).

I went through my code and added obj in the appropriate places, but FAILED TO USE THE clear COMMAND in the MATLAB command window. Since I'm new to MATLAB, I was unaware of its importance. I just assumed saving the file and re-instantiating my class would be sufficient. It is not.

I hope this helps anybody who comes across this question.

like image 171
mrKelley Avatar answered Nov 15 '22 17:11

mrKelley


You don't need to pass the obj to the input if you declare the methods as static:

classdef class1
    methods (Static)
        function y=aPLUSb(a,b)
            y=a+b;
        end
    end
end
like image 1
Daniel Saldarriaga López Avatar answered Nov 15 '22 17:11

Daniel Saldarriaga López