2014-07-03 50 views
1

我在Matlab中實現了一個派生自matlab.mixin.Copyable的類。我想抑制命令窗口的輸出,以便用戶不具有有關該類的信息。我想出於安全原因這樣做。例如:在matlab中隱藏對象信息

a = myStack; 
a 

ans= 

myStack with no properties. 

但是用戶可以點擊myStack並提供有關該類的信息。我知道,我可以重載顯示這一點,但我想要的行爲就像如下:

b = handle(1); 
b 

ans= 

handle 

我怎麼能做到這一點? 謝謝。

+3

請注意'struct(a)'顯示所有屬性。你想要保護什麼? – Daniel

回答

1

您必須從matlab.mixin.CustomDisplay派生接口並覆蓋getPropertyGroups方法。

對於刪除標題中的幫助鏈接的具體目的,還可以覆蓋getHeader方法。

注意:我不知道如何以這種方式真正處理安全。用戶仍然可以通過其他方式獲取有關您班級的詳細信息。例如meta = ?MyClass,或者只是edit MyClass,如果沒有用pcode加密,或者只是在編輯器中輸入myInstance.,並讓智能感知列表全部non hidden/private方法和屬性。

如顯示你想有:

classdef foo < matlab.mixin.CustomDisplay 

    properties   
     Login = 'root'; 
     Password = '1234'   
    end 

    methods (Access = protected)   
     function [str] = getHeader(obj) 
      str = mfilename; 
     end 
     function [pg] = getPropertyGroups(obj) 
      pg = []; 
     end 
     function [str] = getFooter(obj) 
      str = sprintf('\n'); 
     end   
    end 

end 

可能是更好的解決方案,以避免顯示的一些屬性(包括幫助鏈接):

classdef foo < matlab.mixin.CustomDisplay 

    properties (SetAccess = private, GetAccess = private) % here remove any public access, use '(Hidden)' if only want to remove from display and help   
     Login = 'root'; 
     Password = '1234'   
    end  

end 

注意:小心,因爲@丹尼爾寫道,無論你會做什麼,struct(a)顯示所有屬性名稱和值。

+0

感謝您的信息! – Edwardo

1

除了來自@CitizenInsane的方法,您可以通過簡單地將Hidden = true屬性添加到部分或全部屬性中來獲得所需的內容。

重申別人的說法,但是,如果你這樣做是爲了嚴重阻止人們理解你的班級的內部,struct(a)將始終顯示他們的屬性。您可以使用struct方法超載您的課程,該方法出錯,但builtin('struct', a)仍然會執行原始操作。此外,?Classname將提供有關包含其屬性的類的元信息。

+0

有沒有辦法完全防止這種情況? – Edwardo

+0

不可以。您可以混淆屬性名稱,例如將它們稱爲Hidden1,Hidden2等。 –