Main Content

함수 내에서 변수를 불러올 때 발생하는 예기치 않은 결과

MAT 파일에서 데이터를 불러오는 함수가 있는데 MATLAB®이 예상 결과값을 반환하지 않는다면, MAT 파일의 변수가 MATLAB 함수와 동일한 이름을 가지고 있는지 여부를 확인하십시오. 함수 이름과 충돌하는 일반적인 변수 이름으로는 i, j, mode, char, size, path가 있습니다.

이러한 예기치 않은 결과가 발생하는 이유는 함수를 실행하면 MATLAB이 함수 실행 전에 함수에 포함된 모든 코드를 전처리하기 때문입니다. 그러나 load에 대한 호출은 전처리되지 않습니다. 즉, MATLAB이 MAT 파일 내의 변수는 인식하지 못하는 것입니다. 따라서 MATLAB 함수와 이름이 같은 변수는 MATLAB 함수로 전처리되어 예기치 않은 결과를 초래하게 됩니다. 이는 스크립트의 경우와 다릅니다. MATLAB은 스크립트를 명령 창에서처럼 라인 단위로 전처리하고 실행합니다.

변수 height, width, length가 포함된 MAT 파일을 예로 들어보겠습니다. findVolume과 같은 함수에서 이러한 변수를 불러올 경우 MATLAB은 length에 대한 참조를 MATLAB length 함수에 대한 호출로 해석하여 다음과 같은 오류를 반환합니다.

function vol = findVolume(myfile)
  load(myfile);
  vol = height * width * length;
end
Error using length
Not enough input arguments.

혼동을 피하기 위해, 함수를 정의할 때 다음 접근 방식 중 하나(또는 그 이상)를 선택하십시오.

  • 변수를 구조체형 배열로 불러옵니다. 예를 들면 다음과 같습니다.

    function vol = findVolume(myfile)
      dims = load(myfile);
      vol = dims.height * dims.width * dims.length;
    end
  • load 함수 호출 시 변수의 이름을 명시적으로 포함시킵니다. 예를 들면 다음과 같습니다.

    function vol = findVolume(myfile)
      load(myfile,'height','width','length')
      vol = height * width * length;
    end
  • load를 호출하기 전에 함수 내에서 변수를 초기화합니다. 변수를 초기화하려면 변수를 빈 행렬이나 빈 문자형 벡터에 할당하십시오. 예를 들면 다음과 같습니다.

    function vol = findVolume(myfile)
      height = [];
      width = [];
      length = [];
      load(myfile);
      vol = height * width * length;

특정한 변수 이름이 MATLAB 함수와 연결되어 있는지 확인하려면 exist 함수를 사용하십시오. 반환 값 5는 이름이 MATLAB 내장 함수임을 나타냅니다.

참고 항목

관련 항목