Matlab类方法:参数太多

Matlab类方法:参数太多,matlab,oop,class,methods,arguments,Matlab,Oop,Class,Methods,Arguments,我找到了一些相关的问题,但没有找到答案 为了学习MATLAB中的OOP语法,我正在编写一个简单的MATLAB小类。我对Python非常熟悉,并且在尝试使用MATLAB时非常紧张。定义如下: classdef Car < handle properties speed = [0,0] %x,y velocity position = [0,0] running = false end methods

我找到了一些相关的问题,但没有找到答案

为了学习MATLAB中的OOP语法,我正在编写一个简单的MATLAB小类。我对Python非常熟悉,并且在尝试使用MATLAB时非常紧张。定义如下:

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
实例化是可行的,但我调用的任何方法都会抛出错误。foo.start,例如:

Error using Car/start
Too many input arguments.

我遗漏了什么???

既然我不知道如何删除这个问题,我会尽力回答。与其他语言一样,MATLAB中的面向对象编程希望将
obj
作为类方法中的第一个参数(如python中的
self
)。对对象的引用是修改其属性所必需的。我没有在方法定义中包含它,所以当我调用该方法时,我得到了“参数太多”错误。这是因为如果你做
foo.method(a,b)
,那么对象
foo
实际上是作为一个参数传递的,所以你的函数实际上得到了3个输入,即
method(foo,a,b)

我检查了我的代码并在适当的位置添加了
obj
,但未能在MATLAB命令窗口中使用
clear
命令。由于我是MATLAB新手,我不知道它的重要性。我只是假设保存文件并重新实例化我的类就足够了。事实并非如此


我希望这能帮助任何遇到这个问题的人。

你回答了自己的问题,这很好。但是,您的问题似乎包括您在开始时很难执行的代码。我会认为您的代码在开始时是这样的:

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(x,y)    % Add to speed
            obj.speed = obj.speed + [x,y]
        end

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

        function start()
            obj.running = true
        end

        function stop()
            obj.running = false
        end
    end

end
classdef车
直到后来,你在问题中写道:

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
classdef车

请注意,执行问题中的代码允许我访问和执行类中声明的所有方法。尝试访问在第一个代码块中声明的方法将导致“参数太多”错误。尝试访问第二个块中声明的方法的效果与预期一样。

如果将方法声明为静态,则无需将obj传递给输入:

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

我应该澄清的是,对于我试图调用对象的任何方法来说,都是相同的“输入参数太多”错误。什么版本的MATLAB?你的代码在R2011b上对我有效。。。我刚刚使用了清除命令,现在它开始工作了。我应该删除这个问题吗?
classdef class1
    methods (Static)
        function y=aPLUSb(a,b)
            y=a+b;
        end
    end
end