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