MATLAB有两种基本种类®对象 - 处理和值。
价值对象的行为就像MATLAB基本类型相对于复制操作。副本是独立的值。您在一个对象上执行的操作不会影响该对象的副本。
处理对象由其句柄变量引用。句柄变量的副本是指同一对象。从引用该对象的所有句柄变量中可以看到您在手柄对象上执行的操作。
如果您要定义类并要支持处理对象副本,请参见万博1manbetx实施手柄类。
MATLAB数字变量是值对象。例如,当您复制时一个
到变量b
,两个变量彼此独立。改变价值一个
不改变价值b
:
a = 8;b = a;
现在重新分配一个
。b
不变:
a = 6;b
b = 8
清理一个
不影响b
:
清除一个b
b = 8
值存储为值对象中属性的值的复制行为与数字变量相同。例如,假设VOBJ1
是带有属性的值对象一个
:
vobj1.a = 8;
如果您复制VOBJ1
至VOBJ2
,然后更改价值VOBJ1
财产一个
,复制对象属性的价值,vobj2.a
,不受影响:
vobj2 = vobj1;vobj1.a = 5;vobj2.a
ANS = 8
这是一个称为的句柄课程HDClass
定义一个称为的属性数据
。
ClassDefHDClass特性数据结尾方法功能obj = hdclass(val)如果nargin> 0 obj.data = val;结尾结尾结尾结尾
创建此类的对象:
hobj1 = hdclass(8)
由于此语句未用半元素终止,因此MATLAB显示有关该对象的信息:
hobj1 =具有属性的HDClass:数据:8
变量HOBJ1
是引用创建对象的句柄。复制HOBJ1
至HOBJ2
导致另一个涉及相同对象的句柄:
hobj2 = hobj1
hobj2 =具有属性的HDClass:数据:8
由于处理对象的引用,因此复制句柄将句柄复制到新的变量名称,但该手柄仍然引用同一对象。例如,鉴于HOBJ1
是带有属性的句柄对象数据
:
hobj1.data
ANS = 8
改变HOBJ1
'数据
属性和复制对象的价值数据
属性也会改变:
hobj1.data = 5;hobj2.data
ANS = 5
因为HOBJ2
和HOBJ1
是同一对象的处理,更改副本,HOBJ2
,还更改您通过句柄访问的数据HOBJ1
:
hobj2.data = 17;hobj1.data
ANS = 17
重新分配手柄变量与重新分配任何MATLAB变量相同。当您创建对象并将其分配给HOBJ1
:
HOBJ1 = HDCLASS(3.14);
HOBJ1
引用新对象,而不是前面引用的相同对象(仍然引用HOBJ2
)。
当您从工作区清除手柄时,MATLAB卸下了变量,但不会删除另一个手柄引用的对象。但是,如果没有对对象的引用,则MATLAB会破坏对象。
给出HOBJ1
和HOBJ2
,两者都引用相同的对象,您可以清除要么在不影响对象的情况下进行处理:
hobj1.data = 2^8;清晰的HOBJ1 HOBJ2
hobj2 =具有属性的HDClass:数据:256
如果你们俩都清除了HOBJ1
和HOBJ2
,然后没有对对象的引用。MATLAB破坏对象并释放该对象使用的内存。
要删除任何数量的手柄引用的对象,请使用删除
。给出HOBJ1
和HOBJ2
,两者都指的是同一对象,请删除任何一个句柄。MATLAB删除对象:
hobj1 = hdclass(8);hobj2 = hobj1;删除(hobj1)hobj2
hobj2 =删除的HDClass
利用清除
从工作区中删除变量。
当您将对象传递给函数时,MATLAB将对象的副本传递到函数工作区。如果函数修改对象,则MATLAB仅修改函数工作区中对象的副本。在这种情况下,手柄和价值类之间的复制行为差异很重要:
值对象 - 该函数必须返回对象的修改副本。要修改呼叫者工作区中的对象,请将函数输出分配给同名的变量
处理对象 - 函数工作空间中的副本是指同一对象。因此,该函数不必返回修改后的副本。
要确定对象是否是句柄对象,请使用伊萨
功能。如果OBJ
是某些类的对象,此语句确定是否OBJ
是一个句柄:
isa(obj,'处理')
例如,containser.map
类创建一个句柄对象:
hobj = contains.map({{“红袜”,,,,'洋基'},{“波士顿”,,,,'纽约'});伊萨(霍布,'处理')
ans = 1
霍布
也是一个containser.map
目的:
isa(Hobj,'containser.map')
ans = 1
查询班级霍布
表明这是一个containser.map
目的:
班级(HOBJ)
ans = contains.map
这班级
函数返回对象的特定类。