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

Vah*_*agn 5 oop matlab object handle

当我试图在MATLAB containers.Map中使用MATLAB句柄对象作为键值时,问题出现了.

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  
Run Code Online (Sandbox Code Playgroud)

结束

Mik*_*ail 1

我从未听说过HashCodeJava/C# 中的对象之类的东西应用于 MATLAB OO。如果您获得 MATLAB 对象的地址(format debug在命令窗口中键入),那么使用它仍然不合理,因为它不会像 C++ 中那样保持不变,而是会被系统(托管内存)移动。

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

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