2011-06-22 38 views
4

當我試圖使用MATLAB handle objects作爲MATLAB containers.Map中的關鍵值時,問題就出現了。如何獲取MATLAB句柄對象的ID?

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 

+0

你可能是不是'ld',而是關係運算符'lt',即'lower then'? – Mikhail

+0

是米哈伊爾,這是一個錯字。 – Vahagn

回答

1

我從來沒有聽說過的東西象Java/C#對象HashCode應用到MATLAB OO。如果你得到一個MATLAB對象的地址(在命令窗口輸入format debug),使用它仍然是不合理的,因爲它不會像C++那樣保持不變,而是會被系統(託管內存)移動。

您可以手動爲您的MATLAB對象實現一個接口getHashCode()。與傳統的哈希碼不同,您必須確保您的哈希碼爲總是因不同對象而異 - 不是一項簡單的任務!

MATLAB默認比較函數sort顯然在內部使用對象哈希碼,但這不會幫助你在這裏 - 比較對象實際上是一個正交的概念,他們的哈希碼。

相關問題