文档

处理对象的行为

一个以上的变量可以指代相同的处理对象。因此,用户价值类的实例句柄类的实例不同于互动。了解手柄对象的行为如何帮助您确定是否实施手柄或值类。本主题说明有些互动。

有关句柄类的更多信息,请参见手柄类

什么是把手?

某些类型的MATLAB®对象处理。当一个变量保持的手柄,它实际上具有对该对象的引用。

句柄对象允许多个变量引用同一对象。句柄-对象行为影响在复制句柄对象和将它们传递给函数时发生的情况。

处理的副本

手柄对象变量的所有副本指的是相同的底层对象。该参考行为意味着,如果h标识句柄对象,则,

H2 = H;

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

例如,MATLABaudioplayer函数创建包含音频源数据的句柄对象,以重新生成特定的声音段。的返回的变量audioplayer功能识别的音频数据,并允许您访问对象的功能来播放音频。

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

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

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

gongSound2 = gongSound;

变量gongSoundgongSound2是同一句柄的副本,因此引用相同的音频源。访问audioplayer使用任意一个变量的信息。

例如,为gong音频源设置一个新值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)或者另一个变量。

功能out = 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)

但是,handle变量仍然存在:

disp (gongSound)
删除音频播放器的句柄

命令显示了gongSound作为一个audioplayer目的:

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

请注意

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

句柄gongSound不再是指一种有效的对象,如由isvalid处理方法:

isvalid (gongSound)
逻辑0

调用删除在删除的句柄上不执行任何操作,也不会导致错误。可以将包含有效句柄和无效句柄的数组传递给删除。MATLAB删除有效的把手,但遇到那些已经无效的句柄时,不会发出错误。

您不能使用无效的句柄变量访问属性:

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

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

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

要删除变量,gongSound, 用明确:

明确gongSound
名称大小字节类属性fs1x1 8双y 42028x1 336224双

相关话题

是这个主题有帮助吗?