クラスコンストラクターでメソッド属性が変更される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
私は以下を使おうとしました:
mco = metaclass(obj);
mlist = mco.MethodList;
mlist(myMethod1Index).Hidden = false;
、しかし、次のエラーが発生します。
'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
たぶん、クラスコンストラクターの間にメソッドのプロパティを選択し、属性を変更することが可能です。ただし、これはメタクラスを使用せずに実行する必要があります