2012-11-27 7 views
2

저는 Matlab 함수를 작성하고 있었으며 대화식 세션에 복사하여 붙여 넣기를 원했습니다. 일부는 nargin 문장 (예 : if nargin < 1; a = 0; end;)이었으며 할당 된 내 작업 공간에 nargin의 값이 11005 인 것으로 나타났습니다. 아무도 이것이 무엇인지, 함수 (함수 외부)에 사용되는지 여부 및 0으로 설정하는 데 문제가 있는지 여부를 알고 있습니까?함수 밖의 nargin은 무엇입니까?

+2

그것을 가지고 * 가능성 *이 값 때문에 글로벌 작업 공간 범위에서 (때 함수로 사용되지 않고 변수로 사용됨) 사용하지 않으므로 할당되지 않습니다. * 미확인 - 물건의 행동 종류. * BTW, 당신은 여전히 ​​매개 변수의 수를 특정 기능의 특징을 가지고 (작업 공간 수준에서) 기능으로 사용할 수 있습니다. – Acorbe

+1

[docs] (http://www.mathworks.com/help/matlab/ref/nargin.html)에서 : "'nargin'은 현재 실행중인 함수에 대한 호출에서 전달 된 입력 인수의 개수를 반환합니다.이' nargin' 구문 *은 함수의 몸체에서만 *. " – plesiv

답변

3

함수 내에서 사용되는 경우 nargin은 해당 함수로 전달되는 매개 변수 수를 제공합니다. 문자열 인수 fn과 함께 사용되는 것은 내장 함수이며 함수 fn에 의해 취해진 매개 변수의 수를 반환합니다. 당신은 하지 작업 영역에서 매개 변수없이 호출한다 : 현재 실행중인 함수에 대한 호출에 전달 된 입력 인수의 수를 반환 nargin

합니다. 이 nargin 구문은 함수 본문에서만 사용하십시오.

당신은 할 수 있지만, 그 다음 두 번째 의미를 잃어 버리게 한 이후, nargin에 값을 할당하지 않도록해야합니다 :

nargin('sparse') 

ans = 

6 

nargin = 0; 
nargin('sparse') 
Index exceeds matrix dimensions. 
+0

그건 흥미 롭습니다 ... 마지막 경우에는 변수 이름 뒤에 실제 함수 이름이 숨겨져 있습니다. 원칙적으로 모든 기능을 수행 할 수 있습니다. – Acorbe

+0

@Acorbe 예, 아마도별로 유용하지 않을 것입니다. 코드에 버그를 찾기가 어렵지 않다면) – angainor

+0

@Acorbe, 저는 실제로 그 모든 것을 경험합니다. 예를 들어, 나는 종종 변수'set'를 호출하려는 유혹에 저항하기 위해 열심히 싸워야합니다 :) – Nagel