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

jgo*_*ann 10 oop matlab uniqueidentifier

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

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

Nic*_*ick 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
Run Code Online (Sandbox Code Playgroud)

然后检查对象会非常简单.


Sam*_*rts 5

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

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

  • 我猜可能比这更简单.例如,您可以在调试模式下运行代码,在您希望比较的两个引用的两个点中停止.然后使用`assignin('base',...)`将它们保存到基础工作区.然后退出调试器,并进行比较. (2认同)

Lui*_*ndo 0

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

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