如何修改Matlab对象的属性

时间:2008-11-07 16:27:49

标签: matlab properties matlab-class

我创建了一个MATLAB类,类似于:

classdef myclass

  properties
      x_array = [];
  end

  methods
    function increment(obj,value)
       obj.x_array = [obj.x_array ; value);
    end
  end
end

问题是,当我调用x_array函数时,永远不会修改属性increment(): 例如:

>>s = myclass
>>increment(s,5)

>>s.x_array
ans = []

我做了一些研究,我得出结论,这是因为MATLAB使用Lazy Copy for objects,使得我的类继承HANDLE类应该解决了这个问题,但事实并非如此,有人知道为什么会发生这种情况?如果扩展句柄类是解决方案,那么这不是正确的方法:

classdef myclass < handle

还是有任何额外的步骤?

2 个答案:

答案 0 :(得分:24)

这类似于this question。简而言之,您应该做的就是从句柄类继承。

快速示例

文件myclass.m的内容

classdef myclass<handle
    properties
        x_array = []
    end
    methods
        function obj=increment(obj,val)
            obj.x_array=[obj.x_array val];
        end
    end
end

现在,从Matlab命令提示符,您可以执行以下操作

>> s=myclass;
>> s.increment(5)
>> s.increment(6)
>> s

s = 

myclass handle

properties:
    x_array: [5 6]

lists of methods, events, superclasses

答案 1 :(得分:-1)

有一种更简单的方法。您只需要覆盖初始实例s,如下所示:

s= s.x_array

更多信息: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html#bslvcv1

PS:虽然可以使用 handle ,但复制功能的工作方式不同,你应该注意使用它的方式。当您使用句柄时,实际上您正在为obj创建新地址/引用