多个变量可以引用同一句柄对象。因此,用户与句柄类实例的交互方式与值类实例的交互方式不同。了解句柄对象的行为可以帮助您确定是实现句柄还是值类。本主题说明了其中的一些交互。
有关处理类的更多信息,请参阅处理类。
某些类型的matlab®对象是把手.当变量持有句柄时,它实际上持有对该对象的引用。
处理对象启用多个变量来引用相同的对象。处理对象行为会影响复制句柄对象以及将它们传递给函数时会发生什么。
句柄对象变量的所有副本都引用相同的基础对象。此引用行为意味着如果H
识别句柄对象,然后,
h2=h;
创建另一个变量,H2.
,它引用的对象与H
。
例如,matlabaudioplayer.
函数创建一个句柄对象,其中包含音频源数据以再现特定声音段。返回的变量audioplayer.
函数标识音频数据,并允许您访问对象函数以播放音频。
Matlab软件包括您可以加载和使用以创建的音频数据audioplayer.
目的。此示例加载音频数据,创建音频播放器,并播放音频:
加载锣FS.y锣声=音频播放器(y,Fs);播放(锣声)
假设您复制了龚港
对象句柄到另一个变量(锣声2
):
公区2 =宫道;
变量龚港
和锣声2
是相同句柄的副本,因此请参阅相同的音频源。进入audioplayer.
使用变量的信息。
例如,通过为该新值分配新值来设置锣音频源的采样率采样率
财产。首先获取当前采样率,然后设置新的采样率:
sr=gongSound.SampleRate;disp(sr)
8192
gongSound.SampleRate=sr*2;
您可以使用锣声2
要访问相同的音频源,请执行以下操作:
DISP(GongSound2.Samplerate)
16384.
使用新的采样率播放锣声:
播放(公共2)
将参数传递给函数时,函数会将变量从调用函数的工作区复制到函数工作区的参数变量中。
将非句柄变量传递给函数不会影响调用者工作区中的原始变量。例如,myfunc.
修改称为局部变量var.
,但是当函数结束时,局部变量var.
不复存在:
功能myFunc(var)var=var+1;结尾
定义一个变量并将其传递给myfunc.
:
x = 12;myfunc(x)
价值X
在执行后没有更改myfunc(x)
:
DISP(x)
12.
这myfunc.
函数可以返回修改后的值,您可以将其分配给相同的变量名(X
)或另一个变量。
功能out = myfunc(var)out = var + 1;结尾
修改值myfunc.
:
x = 12;x = myfunc(x);DISP(x)
13.
当参数是句柄变量时,函数只复制句柄,而不复制由该句柄标识的对象。两个句柄(原始和本地副本)引用同一个对象。
当函数修改由对象句柄引用的数据时,这些更改可从调用工作区中的句柄变量访问,而无需返回修改后的对象。
例如改良采样器
函数改变了audioplayer.
采样率:
功能modifysamplerge(audioobj,sr)audioobj.samplerve = sr;结尾
创建一个audioplayer.
对象并将其传递给改良采样器
功能:
加载锣FS.ygongSound=audioplayer(y,Fs);disp(gongSound.SampleRate)
8192
ModifysAmplerate(公共,16384)Disp(GongSound.Samplerate)
16384.
这改良采样器
函数不需要返回修改后龚港
对象,因为audioplayer.
对象是句柄对象。
处理对象是成员处理
因此,始终可以使用isa.
功能。isa.
返回逻辑真的
(1
)在测试句柄变量时:
加载锣FS.y公区= audioplayer(y,fs);isa(锣,'处理')
要确定变量是否是有效的句柄对象,请使用isa.
和已验证
:
如果isa(锣,'处理')&& iSvalid(GongSound)......结尾
删除句柄对象后,引用该对象的句柄变量仍可存在。这些变量变得无效,因为它们引用的对象不再存在。正在调用删除
在对象中删除对象,但不清除句柄变量。
例如,创建一个audioplayer.
对象:
加载锣FS.y公区= audioplayer(y,fs);
输出参数,龚港
,是句柄变量。正在调用删除
删除对象以及它包含的音频源信息:
删除(GongSound)
但是,句柄变量仍然存在:
DISP(GongSound)
处理删除的audiopleAlayer
这谁是
命令显示龚港
作为A.audioplayer.
对象:
谁是
名称大小字节类属性fs 1x1 8双通道1x1 0 audioplayer y 42028x1 336224 double
笔记
由此返回的字节的值谁是
命令不包括句柄引用的数据,因为许多变量可以引用相同的数据。
手柄龚港
不再引用有效对象,如已验证
处理方法:
Isvalid(GongSound)
ans =逻辑0
打电话删除
在删除的句柄上没有任何内容并且不会导致错误。您可以传递包含有效和无效句柄的数组删除
.MATLAB将删除有效的句柄,但在遇到已无效的句柄时不会发出错误。
您无法使用无效句柄变量访问属性:
贡恩。赞美
无效或已删除的对象。
访问对象属性的函数和方法会导致错误:
戏剧(公沟)
无效或已删除的对象。
要删除该变量,龚港
,使用清楚的
:
清楚的龚港谁是
名称大小字节类属性Fs 1x1 8 double y 42028x1 336224 double