2

我是 MATLAB 新手,我想编写一个更改该对象属性的类的方法:

classdef Foo

  properties
    a = 6;
  end
  methods
    function obj = Foo()
    end

    function change(obj,bar)
      obj.a = bar
    end
  end
end




foo = Foo()

foo.change(7) //here I am trying to change the property to 7

原来属性还是6。

4

1 回答 1

3

MATLAB 在值类句柄类之间有所区别。值类的实例在赋值上被隐式复制(因此表现得像普通的 MATLAB 矩阵),句柄类的实例不是(因此表现得像其他 OOP 语言中的实例)。

因此,您必须为值类返回修改后的对象:

classdef ValueClass
    properties
        a = 6;
    end
    methods
        function this = change(this, v)
            this.a = v;
        end
   end
end

像这样称呼它:

value = ValueClass();
value = value.change(23);
value.a

或者,您可以从类派生您的handle类:

classdef HandleClass < handle
    properties
        a = 6;
    end
    methods
        function change(this, v)
            this.a = v;
        end
   end
end

并这样称呼它:

h = HandleClass();
h.change(23);
h.a

MATLAB 文档中有更多信息。

于 2013-03-08T09:00:33.270 回答