【问题标题】:How to get the ID of MATLAB handle object?如何获取 MATLAB 句柄对象的 ID?
【发布时间】:2011-09-20 17:54:22
【问题描述】:

当我尝试将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  

结束

【问题讨论】:

  • 您的意思可能不是ld,而是关系运算符lt,即lower then?

标签: oop matlab object handle


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多