一个以上的变量可以指代相同的处理对象。因此,用户价值类的实例句柄类的实例不同于互动。了解手柄对象的行为如何帮助您确定是否实施手柄或值类。本主题说明有些互动。
有关句柄类的更多信息,请参见手柄类。
某些类型的MATLAB®对象处理。当一个变量保持的手柄,它实际上具有对该对象的引用。
句柄对象允许多个变量引用同一对象。句柄-对象行为影响在复制句柄对象和将它们传递给函数时发生的情况。
手柄对象变量的所有副本指的是相同的底层对象。该参考行为意味着,如果h
标识句柄对象,则,
H2 = H;
创建另一个变量,h2
中,指的是相同的对象h
。
例如,MATLABaudioplayer
函数创建包含音频源数据的句柄对象,以重新生成特定的声音段。的返回的变量audioplayer
功能识别的音频数据,并允许您访问对象的功能来播放音频。
MATLAB软件包括音频数据,您可以加载和使用创建一个audioplayer
对象。此示例加载音频数据,创建音频播放器,并播放音频:
负载龚FsygongSound = audioplayer (y, Fs);玩(gongSound)
假设你复制gongSound
另一个变量的对象句柄(gongSound2
):
gongSound2 = gongSound;
变量gongSound
和gongSound2
是同一句柄的副本,因此引用相同的音频源。访问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“处理”)
若要确定变量是否是有效的句柄对象,请使用isa
和isvalid
:
如果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双