更改Matlab方法属性

更改Matlab方法属性,matlab,methods,attributes,metaclass,Matlab,Methods,Attributes,Metaclass,我试图创建一个Matlab类,在该类中,方法属性在类构造函数中更改。其目的是根据类输入隐藏/显示某些方法 例如: classdef (HandleCompatible) myClass < dynamicprops & handle % & hgsetget properties (Hidden) myProp end methods (Hidden) function obj = myClass(input) %class constru

我试图创建一个Matlab类,在该类中,方法属性在类构造函数中更改。其目的是根据类输入隐藏/显示某些方法

例如:

classdef  (HandleCompatible) myClass < dynamicprops & handle % & hgsetget
properties (Hidden)
    myProp
end
methods (Hidden)
    function obj = myClass(input)
        %class constructor
        %add some dynamic properties
        switch input
            case 1
                %unknown code:
                %make myMethod1 visible
            case 2

                %unknown code:
                %make myMethod2 visible
            otherwise
                %unknown code:
                %make myMethod1 visible
                %make myMethod2 visible
        end
    end
end

methods (Hidden)
    function myMethod1 (obj, input)
        %function...
    end
    function output = myMethod2(obj, input)
        %function...
    end
end
end
,但我得到以下错误:

不允许设置“meta.method”类的“Hidden”属性


谢谢你的回复

如果我需要在类构造函数中有选择地访问我的方法,这可能是一个解决方案。但是,我需要在我的程序中使用这些方法,并在制表符完成时使它们可见或不可见:

%Obj1
myObj1 = myClass (inputs, '-1');
myObj1.myMethod1(arg);
%myObj1.myMethod2 - hidden


%Obj2
myObj2 = myClass (inputs, '1');
%myObj2.myMethod1 - hidden
value1 = myObj2.myMethod2(arg);


%Obj3
myObj3 = myClass (inputs, '0');
myObj3.myMethod1(arg);
value2 = myObj3.myMethod2(arg); 
%here i want to be able to access both methods

也许可以在类构造期间选择方法属性,并更改属性。但是这必须在不使用元类的情况下完成,为什么不只公开工厂方法并根据输入构建不同类的实例呢?您可以使用访问限定符锁定以下内容:

% a.m
classdef a
    properties, a_thing, end
    methods ( Access = ?factory )
        function obj = a()
        end
    end
end

% b.m
classdef b
    properties, b_thing, end
    methods ( Access = ?factory )
        function obj = b()
        end
    end
end

% factory.m
classdef factory
    methods ( Static )
        function val = build(arg)
            if isequal(arg, 'a')
                val = a;
            else
                val = b;
            end
        end
    end
 end

为什么不只公开工厂方法并根据输入生成不同类的实例?您可以使用访问限定符锁定以下内容:

% a.m
classdef a
    properties, a_thing, end
    methods ( Access = ?factory )
        function obj = a()
        end
    end
end

% b.m
classdef b
    properties, b_thing, end
    methods ( Access = ?factory )
        function obj = b()
        end
    end
end

% factory.m
classdef factory
    methods ( Static )
        function val = build(arg)
            if isequal(arg, 'a')
                val = a;
            else
                val = b;
            end
        end
    end
 end