Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能否获得MATLAB对象的唯一标识符?_Matlab_Oop_Uniqueidentifier - Fatal编程技术网

能否获得MATLAB对象的唯一标识符?

能否获得MATLAB对象的唯一标识符?,matlab,oop,uniqueidentifier,Matlab,Oop,Uniqueidentifier,我正在调试一些MATLAB代码,希望确保对一个对象的两个引用实际上是对同一个对象的引用。是否有方法获取对象的唯一标识符(如内存地址) 据我所知,我无法将自己的ID添加到对象中,因为它们是MATLAB随机数流。您可以使用每个图形对象中的UserData字段来存储您生成的唯一标识。如果使用用户定义的类,可以在类中添加类似的字段 通过使用全局计数器分配每个新标识,可以保持标识的唯一性。如果使用OOP,则可以添加属性ID,并在构建对象时进行设置 java.rmi.server.UID()是获取唯一ID的

我正在调试一些MATLAB代码,希望确保对一个对象的两个引用实际上是对同一个对象的引用。是否有方法获取对象的唯一标识符(如内存地址)


据我所知,我无法将自己的ID添加到对象中,因为它们是MATLAB随机数流。

您可以使用每个图形对象中的
UserData
字段来存储您生成的唯一标识。如果使用用户定义的类,可以在类中添加类似的字段


通过使用全局计数器分配每个新标识,可以保持标识的唯一性。

如果使用OOP,则可以添加属性
ID
,并在构建对象时进行设置

java.rmi.server.UID()
是获取唯一ID的好方法

然而,通过
==
进行测试将检查实际句柄,因此这更多是一个可用性问题

classdef yourClass < handle

properties    
    ID
end

methods
    function obj = yourClass()
        obj.ID = java.rmi.server.UID();
    end

end

end
classdef yourClass

这样,检查对象就相当简单了

如果要比较的对象是MATLAB随机数流(即,它们属于类
RandStream
),则它们是句柄对象。在这种情况下,您不需要唯一的ID:如果您使用
eq
==
比较它们,并且它们相等,那么它们是相同的对象


正如您所说,您无法将自己的属性添加到类
RandStream
的对象中,但是如果您确实想添加,您可以将
RandStream
子类化,并将自己的属性添加到子类中。您可以在属性中存储一个唯一标识符,该标识符由
char(java.util.UUID.randomuid)
生成
用户数据并不存在于每个对象中。它存在于所有Handle Graphics对象中,但这不是OP所要求的。我无法轻松比较引用,因为它们位于代码的不同部分。似乎要么我必须添加代码才能进行比较,要么我必须将RandStream子类化。(我希望有一个更简单/更快的解决方案。)我想可能有比这更简单的方法。例如,您可以在调试模式下运行代码,在您希望比较的两个引用所在的两个点上分别停止。然后使用
assignin('base',…)
将它们保存到基本工作区。然后退出调试器,并比较它们。您是否使用MATLAB的
RandStream
?如果是这样的话,它已经是一个句柄类,并且继承了等式
=
操作符(
eq
)。规则是在比较句柄对象时,使用
eq
操作符测试对象是否为同一句柄。使用
isequal
测试对象的属性值是否相等,即使这些对象是不同的句柄。忽略引用语义,可以比较两个随机数流的算法、种子和内部状态。