2012-09-13 64 views
2

假設我有一個函數的重載主力:是否可以檢測Matlab函數的忽略輸出?

[a b c d] = lotsOfComputation(); 

在一些使用情況下,我可能只需要一個或兩個的輸出。在這些情況下,我忽略了~的輸出。是否有可能在lostOfComputation函數中檢測到這個?

(是的,我知道的更優雅的解決方案是一個重構爲獨立的功能。我已經這樣做了的立即使用情況,但問題仍然在我的腦海。)

+0

MATLAB確實有檢測輸出是否被指定的方法。 'hist'函數就是一個例子。沒有輸出,它繪製直方圖。通過輸出,它會返回每個箱的數量和箱距。你可以試着查看它的文檔,看看是否有辦法檢測一個省略的輸出變量。 (我會這樣做,但是我的機器現在已經連續運行了數小時) – Doresoom

回答

3

當然,嘗試nargout,它返回輸出參數的數量。那麼,實際上這將在省略參數時起作用,但它將作爲參數來計數。這裏有一個例子:

function [a b c] = test() 
    a=0;b=0;c=0; 
    disp(nargout); 
end 

>> [a, b] = test(); 
    2 
>> [~, b] = test(); 
    2 
>> [~, ~, ~] = test(); 
    3 

因此,也許回答你的問題相關的是否定的,至少不是nargout

+0

不錯的觀察+1 – learnvst

+2

正如你注意到自己,它不適用於省略的輸出變量,這是OP詢問的。 – angainor

1

直接回答你的問題,不是我所知道的。但是,如果您問這是爲了節省潛在的浪費計算,您可以將您的功能拆分爲子功能,但使用deal保留原始文章中的一般語法。

例如,如果你一直想ablotsOfComputation,你可以改造你的功能

[a b] = lotsOfComputation(); 

然後你可以有c和兩個獨立的計算d

[c] = cComp(); 
[d] = dComp(); 

你可以然後寫你的原始功能爲

[a b c d] = deal(lotsOfComputation(), cComp(), dComp()); 

如果你想忽略的cd輸出,你可以替換的交易功能的空值的函數調用,即

[a b ~ d] = deal(lotsOfComputation(), 0, dComp()); 

我知道這並不直接回答這個問題,但它可能是理論上的興趣:)

相關問題