classB インスタンスである属性 attrA を持つ、classA のジェネリック subsref を作成しています。これまでのところ、機能しています。次のようなことができます
x = objA.attr1.methB(),
それは私が最初にやろうとしていたことでした。
function this = Class1(varargin)
this.attrA = ClassB()
this = class(this,'ClassA')
function this = ClassB()
this.AttrB1 = 'valueB1'
this.AttrB2 = 'valueB2'
function out = methB
out = this.AttrB2
私が遭遇した問題はこれです:メソッドへの呼び出しが私のsubsrefで実行されるとき、私はこのようにします(それがメソッドであることの検出などは前に行われます):
methName = index(1).subs;
args = index(2).subs;
if iscell(args)
varargout = {feval(methName,this,args{:})};
else
varargout = {feval(methName,this,args)};
end %end if iscell
問題は、methName メソッドが可変数の出力をサポートしている場合、この varargout が [x,y,...] と同等ではないことです (出力数は subsref の呼び出しで割り当てられる必要があるため、methName は常に単一の出力を返します)。 、これは常に私が望むものではありません(ほぼ、常にではありません)。
必要な出力の数を methName に知らせるにはどうすればよいですか? (パラメータとして N を渡す必要はありません)。
文字列str='[out1,out2,out3...]'
を作成してから次のようなことをするようなことを考えています
eval([
str ...
'= {feval(methName,this,args{:})};'...
])
しかし、もっとエレガントな方法があるに違いないと私は考え続けています。