10

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

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

4

3 回答 3

5

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

正如您所说,您无法将自己的属性添加到 class 的对象中RandStream,但如果您真的想要,您可以子类RandStream化并将您自己的属性添加到子类中。您可以在属性中存储一个唯一标识符,使用char(java.util.UUID.randomUUID).

于 2013-09-04T15:03:33.553 回答
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

然后检查您的对象将相当简单。

于 2013-09-04T15:02:09.330 回答
0

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

可以通过使用全局计数器分配每个新身份来保持身份的唯一性。

于 2013-09-04T14:57:27.027 回答