主要内容

处理对象的行为

一个以上的变量可以引用相同的处理对象。因此,与用户交互处理类的实例值类的不同实例。了解处理对象的行为可以帮助您确定是否实现处理或类的值。这一主题说明了其中的一些交互。

有关处理类的更多信息,请参阅处理类

处理是什么?

某些种类的MATLAB®对象是处理。当一个变量保存处理,它实际上拥有对象的引用。

处理对象启用多个变量来引用同一个对象。传输行为的影响会发生什么当你复制处理对象,当你将它们传递函数。

处理的副本

所有副本的处理对象变量引用相同的底层对象。这意味着如果参考行为h标识一个处理对象,然后,

h2 = h;

创建另一个变量,h2,指的是相同的对象h

例如,MATLABaudioplayer函数创建一个处理对象包含音频源数据复制特定的声音片段。返回的变量audioplayer函数识别音频数据,并使您能够访问对象函数来播放音频。

MATLAB软件包含音频数据,您可以加载和使用它来创建一个audioplayer对象。这个示例加载音频数据,创建音频播放器,并播放音频:

负载FsygongSound = audioplayer (y, Fs);玩(gongSound)

假设您复制gongSound对象句柄,另一个变量(gongSound2):

gongSound2 = gongSound;

的变量gongSoundgongSound2复制相同的处理,因此引用相同音频源。访问audioplayer使用变量的信息。

例如,设置采样率的锣音频源通过指定一个新值SampleRate财产。首先获取当前采样率,然后设置一个新的采样率:

sr = gongSound.SampleRate;disp (sr)
8192年
gongSound.SampleRate= sr*2;

您可以使用gongSound2访问相同的音频来源:

disp (gongSound2.SampleRate)
16384年

打锣的声音与新采样率:

玩(gongSound2)

处理对象修改功能

一个参数传递给一个函数时,函数的变量副本从工作区中你调用这个函数中的参数变量函数的工作区。

nonhandle变量传递给一个函数不影响原始变量在调用者的工作区。例如,myFunc修改一个局部变量var,但在函数结束时,局部变量var不再存在:

函数myFunc (var) var = var + 1;结束

定义一个变量并将其传递给myfunc:

x = 12;myFunc (x)

的价值x执行后没有改变吗myFunc (x):

disp (x)
12

myFunc函数可以返回修改后的值,你可以分配给相同的变量名(x)或另一个变量。

函数= myFunc (var) = var + 1;结束

修改值myfunc:

x = 12;x = myFunc (x);disp (x)
13

当参数是一个句柄变量,函数只复制处理,而不是对象的句柄。处理(原始和本地副本)引用同一个对象。

当函数修改数据被处理的对象,这些变化都可以在处理变量在调用工作区而不需要返回修改后的对象。

例如,modifySampleRate功能的变化audioplayer采样率:

函数audioObj modifySampleRate (audioObj sr)。SampleRate =老;结束

创建一个audioplayer对象并将其传递给modifySampleRate功能:

负载FsygongSound = audioplayer (y, Fs);disp (gongSound.SampleRate)
8192年
modifySampleRate (gongSound 16384) disp (gongSound.SampleRate)
16384年

modifySampleRate函数不需要返回修改gongSound对象,因为audioplayer对象是处理对象。

确定一个对象句柄

处理对象的成员处理类。因此,你可以确定一个对象作为处理使用isa函数。isa返回逻辑真正的(1当测试一个句柄变量:

负载FsygongSound = audioplayer (y, Fs);isa (gongSound“处理”)

来确定一个变量是一个有效的处理对象,使用isaisvalid:

如果isa (gongSound“处理”)& & (gongSound)是否是可用的。结束

删除处理对象

当处理对象已被删除,处理变量引用的对象仍然可以存在。这些变量成为无效的,因为他们被称为对象已不复存在。调用删除对象删除对象,但不清楚处理变量。

例如,创建一个audioplayer对象:

负载FsygongSound = audioplayer (y, Fs);

输出参数,gongSound,是一种处理变量。调用删除删除对象以及它所包含的音频源信息:

删除(gongSound)

然而,处理变量仍然存在:

disp (gongSound)
句柄删除audioplayer

命令显示了gongSound作为一个audioplayer对象:

类属性名称大小字节Fs 1 x1 8双gongSound 1 x1 0 audioplayer y 42028 x1 336224双

请注意

返回的字节的值命令不包括引用的数据处理,因为许多变量可以引用相同的数据。

句柄gongSound不再是一个有效的对象,如图所示的isvalid处理方法:

isvalid (gongSound)
ans =逻辑0

调用删除在删除处理什么也不做,不会产生错误。你可以通过数组包含有效和无效处理删除。MATLAB删除有效处理,但是没有一个错误当遇到问题处理已经无效。

你不能访问属性无效的句柄变量:

gongSound.SampleRate
无效的或删除对象。

访问对象属性的函数和方法导致一个错误:

玩(gongSound)
无效的或删除对象。

把变量,gongSound,使用清晰的:

清晰的gongSound
类属性名称大小字节Fs 1 x1 8双y 42028 x1 336224双

相关的话题