2014-07-03 37 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等。 –