2017-03-31 68 views
3

對於任何功能,我能夠決定的變量,通過明確界定了我多少產出預期返回[out1,out2,...,outn] = ...力從函數調用輸出的數量沒有設置輸出變量

編輯:能最大化輸出潛在#也將是有益的

例題

下面的代碼究竟是幹什麼的預期(是的,這是多餘的myArray(IND) = 1;

[I,J] = ind2sub(size(myArray),IND) 
myArray(I,J) = 1; 

當我嘗試直接傳遞函數的參數,我沒有得到結果我wannt

myArray(ind2sub(size(myArray),IND)) = 1; 

我得到有效時myArray(I) = 1;我想myArray(I,J) = 1;

問題

我該如何指定有多少輸出變量沒有返回明確定義我的輸出參數?

我期望在eval()家庭或一些類型轉換[],{},(:), etc.一些功能就可以了,但我還沒有看到任何文件或得到其中的任何工作。

回答

5

使用的ind2sub輸出直接作爲一個指數到myArray而沒有中間變量的直接的問題是,只有ind2sub第一輸出是由subsindex進行索引myArray當被請求。然後將第一個輸出用作linear index來索引myArray並分配值,這會導致您的意外行爲。

相反,你可以使用一個cell array to capture as many outputs只要你想,然後依靠{}索引,以產生comma-separated list

[outputs{1:ndims(myArray)}] = ind2sub(size(myArray), IND); 

那麼您可以使用包含所有輸出再往前所有值inputs or subscripts別處這個單元陣列:

myArray(outputs{:}) = 1; 

話雖這麼說,在這個例子中,你所展示的,你真不」因爲您可以使用線性索引​​來直接索引到myArrayIn fact, using the output of ind2sub will likely give you the incorrect assignment as every permutation of the subscripts will be used when assigning values rather than the element-wise pairing of subscripts

myArray(IND) = 1; 

一般而言,可以沿着使用此技術與nargout請求所有輸出參數如果存在的輸出非可變數量。

[outputs{1:nargout('func')}] = func(inputs); 
+0

啊謝謝你,你已經強調了爲什麼需要顯式輸出定義內置函數與變量輸出。我希望有一個內聯的解決方案,允許顯式的輸出定義沒有變量賦值(即''eval('foo(...),「nargout」,2')')但我還沒有看到任何證據證明存在 –

+0

@BrendanFrick我很困惑。有。它是'[outputs {1:2}] = thing' – Suever

+0

你可以調用內聯嗎? 'foo1([outputs {1:2}] = foo2(...))' –