2017-03-02 1 views
4

Matlab은이 출력 값에 관심이 없다는 것을 나타 내기 위해 어떤 루틴의 출력 인수 목록에 ~ 문자로 도입되었습니다. 예를 들어 : 속도 최적화 이유로일부 출력 인수가 사용되지 않았는지 감지

% Only interested for max position, not max value 
[~, idx] = max(rand(1, 10)); 

, 그것은 출력 인수의 일부가 사용되지 않는 것을 감지하는 몇 가지 루틴 내부에서 가능하다? 예를 들어 :

function [y, z] = myroutine(x) 
%[ 
    if (argout(1).NotUsed) 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 

답변

2

그것은 최고의 하나하지 않을 수 있지만, 쉬운 해결책은 여기

function [y, z] = myroutine(x, doYouWantY) 
%[ 
    if doYouWantY == 0 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 
+0

그래, 나도 그렇게 생각해. 내가 지금까지 구현 한거야. 잠시 동안 당신의 대답을 검증하기 전에 두건의 명령이 있는지 알아볼 수있을거야. – CitizenInsane

0

nargout 방법, 2 차 출력을 편집했다. 하나의 출력 인수로 함수를 호출 할 때마다 출력이 두 번째 인수 일 뿐이라는 사실을 알아야하기 때문에 매우 안정적인 해결책은 아닙니다.

 function [y, z] = myroutine(x) 
    %[ 
    if nargout==1 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    %] 
+0

, 내가 첫 번째 인수에 대한 계산을 건너 뛸 수있는에 관심이 다른 입력 인수를가 아닌 초를 추가하는 것입니다 (나는 출력을 재정렬 할 수없고, 호출 문법을 보존 할 필요가있다.) – CitizenInsane

+0

(1) 두 번째 대신 첫 번째 인수 주위에'if'를두면 작동 할 수도있다. (2) 다른 수업을 입력 해 주시겠습니까? 따라서 보통 스칼라 일 경우 문자열을 입력하고 'isstring'을 확인하십시오. (3) 코드의 해당 부분을 계산할지 여부에 따라 참 또는 거짓 인 추가 입력 인수를 추가합니다. –

관련 문제