我正在调试一些MATLAB代码,并希望确保对对象的两个引用实际上是指同一个对象。有没有办法获取对象的唯一标识符(例如内存地址)?
据我所知,我无法将自己的ID添加到对象中,因为它们是MATLAB随机数流。
答案 0 :(得分:5)
如果您正在使用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
检查对象会很简单。
答案 1 :(得分:5)
如果您想要比较的对象是MATLAB随机数流(即它们是类RandStream
),那么它们就是句柄对象。在这种情况下,您不需要唯一ID:如果您使用eq
或==
进行比较并且它们相同,那么它们就是相同的对象。
正如您所说,您无法将自己的属性添加到类RandStream
的对象中,但如果您真的想要,则可以继承RandStream
并将自己的属性添加到子类。您可以在属性中存储唯一标识符,使用char(java.util.UUID.randomUUID)
生成。
答案 2 :(得分:0)
您可以使用每个图形对象中的UserData
字段来存储您生成的唯一标识。如果使用用户定义的类,则可以在类中添加类似的字段。
通过使用全局计数器来分配每个新身份,身份可以保持唯一。