将元素添加到matlab单元格数组成员变量中

时间:2014-12-23 16:40:35

标签: matlab class cell-array

我有一个名为sampleClass的类,其中包含一个名为list的单元数组成员变量。 现在我正在尝试将元素添加到内部列表中。为此,我创建了方法addToList。该方法只是尝试将元素添加到list

classdef sampleClass

    properties
        list = {}
    end

    methods
        function addToList(obj)
            obj.list{end+1}='test';
            obj.list
        end
    end

end

现在的问题是,元素没有存储在列表中。 在函数addToList内,以下输出表明该元素存储在list中:

>> samp = sampleClass();
>> samp.addToList
ans = 
    'test'

但是在离开该函数后,该元素不再可访问:

>> samp.list
ans = 
     {}

有人知道出了什么问题吗?我正在使用Matlab 7.11.0(R2010b)。 谢谢你的帮助。

于连

1 个答案:

答案 0 :(得分:2)

那是因为你忘了继承handle类:

classdef sampleClass < handle %// Change here!

    properties
        list = {}
    end

    methods
        function addToList(obj)
            obj.list{end+1}='test';
            obj.list
        end
    end    
end

如果要保留修改班级实例时所做的更改,必须继承handle班级。这可以通过获取类定义(代码的第一行)和执行< handle来完成。如果不这样做,那么您所做的任何更改都不会被保存。为了证明这是有效的,这就是我在MATLAB中得到的:

>> samp = sampleClass();
>> samp.addToList

ans = 

    'test'

>> samp.list

ans = 

    'test'

为了更详细,这是MATLAB docs say about handle

  

handle类是遵循句柄语义的所有类的超类。句柄是对象的引用。如果复制对象的句柄,则MATLAB®仅复制句柄,原始和副本都引用相同的对象数据。如果函数修改作为输入参数传递的句柄对象,则修改会影响原始输入对象。

因此,您需要从handle类继承,以便返回对您创建的对象的引用。如果您从handle继承,则会记住您对班级实例所做的任何更改。如果不这样做,您所做的任何更改都不会被注册。