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



我有一个名为 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(。感谢您的帮助。

朱利安

那是因为你忘记从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 文档对handle的描述:

句柄类

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

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

最新更新