如何获取MATLAB句柄对象的ID?

时间:2011-06-22 20:54:36

标签: oop matlab object handle

当我尝试将MATLAB handle objects用作MATLAB containers.Map中的关键值时出现问题。

ld( h1, h2 )定义了句柄对象的线性顺序,因此对使用句柄对象作为地图的关键值应该没有限制,但是只允许使用整数或字符串类型。

此问题的解决方法可能是检索句柄对象的实际ID(地址)(基本上在ld函数中进行比较)。

所以问题是:如何获取句柄对象的ID?


在静态成员函数中使用持久变量发现可以解决方法

在这种情况下,您应该从基类继承所有类,如下所示。

classdef object < handle
properties ( GetAccess = 'public', SetAccess = 'private' )
    id
end

methods ( Access = 'protected' )
    function obj = object()
        obj.id = object.increment();
    end
end

methods ( Static, Access = 'private' )
    function result = increment()
        persistent stamp;
        if isempty( stamp )
            stamp = 0;
        end
        stamp = stamp + uint32(1);
        result = stamp;
    end
end  

1 个答案:

答案 0 :(得分:1)

我从来没有听说过应用于MATLAB OO的Java / C#中的对象HashCode。如果你得到一个MATLAB对象的地址(在命令窗口中键入format debug),使用它仍然是不合理的,因为它不会像C ++那样保持不变,但会被系统(托管内存)移动。

您可以为MATLAB对象手动实现接口getHashCode()。与传统的哈希码不同,您必须确保哈希码对于不同的对象总是不同 - 这不是一项简单的任务!

MATLAB默认比较器函数sort显然在内部使用了对象哈希码,但这对您没有帮助 - 比较对象实际上是与其哈希码的正交概念。