Matlab类方法:参数太多

mrK*_*ley 7 oop methods matlab arguments class

我发现了一些相关的问题,但在那里找不到答案.

我正在编写一个简单的小MATLAB类,以便在MATLAB中学习OOP语法.我对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
Run Code Online (Sandbox Code Playgroud)

这当然没有完成,但后来我使用一个小脚本来弄乱对象:

foo = Car([1,1],[0,2])
foo.start
foo.accelerate(2,3)
Run Code Online (Sandbox Code Playgroud)

实例化工作,但我调用的任何方法都会抛出错误.foo.start,例如:

Error using Car/start
Too many input arguments.
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

mrK*_*ley 23

由于我无法弄清楚如何删除这个问题,我会尽力回答.与其他语言一样,MATLAB中的面向对象编程希望将其obj视为类方法中的第一个参数(如selfpython中).必须对该对象的引用才能修改其属性.我没有在方法定义中包含它,所以当我调用方法时,我得到了"太多参数"错误.那是因为如果你这样做foo.method(a,b),那么对象foo实际上是作为参数传递的,所以你的功能实际上是获得3个输入,即method(foo,a,b).

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

我希望这可以帮助任何遇到这个问题的人.

  • +1为其他人的利益发布 (5认同)