我有一个名为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)。 谢谢你的帮助。
于连
答案 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
继承,则会记住您对班级实例所做的任何更改。如果不这样做,您所做的任何更改都不会被注册。