我爲我的classA製作了一個通用的子參考,它具有屬於classB實例的屬性attrA。 到目前爲止,它的工作,它讓我做的事情一樣在分配可變參數時使用可變數量的輸出
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方法支持可變數量的輸出時,這個變量不等於[x,y,...](在調用subsref時應該分配輸出的數量,所以methName總是返回一個單一的輸出,這並不總是我想要的(幾乎,但並非總是)
我如何讓methName知道我需要多少輸出? (我不想通過N作爲參數)。
我想這樣創建一個字符串str='[out1,out2,out3...]'
,然後做一些像
eval([
str ...
'= {feval(methName,this,args{:})};'...
])
但我一直在想,必須有這樣做的更優雅的方式。
'[output {1:n}] = {feval(methName,this,args {:})};'with 'n'是你期望的產出數量? –