2016-07-01 4 views
0

두 개의 다른 변수를 반환 할 수 있지만 한 번에 하나씩 만 함수 호출에서 반환되는 함수를 알 수있는 방법이 있습니까?다른 반환 변수가있는 함수

예 : I은 ​​출력의 하나가 유효한 다음의 기능을 갖는다 (다른 하나는 수 [] 것)

function [a,b] = AlternatingOutput (input) 
    if input == 1 
     return ONLY A 
    else 
     return ONLY B 
    end 
end 

난 스크립트에서 호출

[a,b] = AlternatingOutput (input) 

나는 다음과 같은 (의사 코드)를 말하고 싶다 :

if (function outputs a) 
    [a,~] = AlternatingOutput(input) 
elseif (function outputs b) 
    [~,b] = AlternatingOutput(input) 
end 

스크립트는 다음과 같다. 루프에서 실행하고 나중에 최신이 필요합니다 유효한 a와 b에 대한 값, 그래서 나는 []로 두 중 하나를 덮어 쓸 수 없습니다

나는 어떤 변수가 될 것인가를 검사하는 함수를 작성할 수 있다는 것을 이해합니다. 출력 될 수 있지만 더 우아한 방법이 있는지 궁금 해서요.

은 내가 내 질문에 분명히했다 바라며, 나는 누군가가 내 질문에 대답을 할 수 있습니다 :

+2

항상 두 개의 값을 반환하지만, [센티넬 값]를 사용 (http://stackoverflow.com/questions/22103552/how-to-make-a-sentinel- : 쉽게 루프에서 스크립트에서 호출 가치 -에서 - MATLAB) fo r "not-returned"값. 'AlternatingOutput'을 검색하면 임시 이름으로 값을 반환합니다 :'[ax, bx] = AlternatingOutput (input)', 그리고 반환 값이 센티널이 아닌 경우에만 재 지정하십시오 ('axin = sentinel a = ax; end'). 함수 I/O는 솔직히 잘못된 디자인처럼 냄새가납니다. –

+2

플래그가 1이면 두 번째 출력 대신 플래그를 넣습니다. 출력이 == a이면 플래그가 0입니다. b – Umar

+0

아,'[]'가 센티넬로 사용될 수 있습니다. 값. –

답변

4

는 출력 인수가 실제로 사용되는 경우 알 수있는 방법이 없습니다 바랍니다. 당신은 nargout를 사용하여 출력 인수의 수를 확인 할 수 있습니다 그리고 내가 문제의 전체 맥락을 모르는

[a] = AlternatingOutput(input) 사이 [~,b] = AlternatingOutput(input)를 구별 할 수 있습니다,하지만 어쩌면 당신은 구조체에 모든 변수를 넣을 수 있습니다? 함수를 호출 할 때마다이 구조체를 전달하고 조작 할 변수를 결정하게하십시오. (이것은 일부 프로그래밍 언어에서 느릴 수 있지만 matlab에서는 느려지지 않을 수 있습니다).

0

셀 재진입은 어떻습니까?

function [ ab ] = testfun(input) 
if input 
    ab={'ax'}; 
else 
    ab={2}; 
end 
end 

셀에 무엇이 있는지 걱정할 필요가 없습니다.

당신이 원하는 무엇도 반환 할 수 THB 기능 AlternatingOutput에서 출력 단 하나의 유효 어쨌든

0

경우, 매트랩 당신은 하나 개의 출력을 반환해야, 유형을 확인하지 않습니다 :

function [X] = AlternatingOutput(input) 
    if input == 1 
     X = A; 
    else 
     X = B; 
    end 
end 
을 변경되는 값을 결정하기 위해 입력을 사용하여 다음

C = {AlternatingOutput(1), AlternatingOutput(2)}; 

하고 :

는 셀에 넣어, 루프에서 A 또는 B 중 어느 하나에 retured 값을 할당한다.입력하면 더 입력 변수를 받아들이는 신경 쓰지 않는 기능은, 왜 입력으로 ab를 통과하면 1 또는 2 단지

for counter = ... 
    input = mod(input,2)+1; 
    C{input}=AlternatingOutput(input); 
end 
0

을 수행 할 수 있습니다

function [a,b] = AlternatingOutput(a,b,input) 
    if input == 1 
     a = new_value_for_a; 
     % b retains its former value 
    else 
     % a retains its former value 
     b = new_value_for_b; 
    end 
end 

그 다음이 될 수 있습니다

for i= ... 
    [a,b] = AlternatingOutput(a,b,input); 
    ... 
    ... 
end