Main Content

함수 호출 결과의 요소 참조하기

이 항목에서는 함수 호출에 의해 생성된 임시 변수에 점 인덱싱을 사용하는 방법을 설명합니다. 함수 호출 결과를 더 큰 표현식의 중간 변수로 사용하면 임시 변수가 생성됩니다. 표현식 내에서의 함수 호출 결과로 생성된 변수는 잠시만 존재하고 실행 후 MATLAB® 작업 공간에 저장되지 않기 때문에 이 결과는 임시적입니다. 이에 대한 예로 표현식 myFunction(x).prop를 들 수 있으며, 이 표현식은 인수 x를 사용하여 myFunction을 호출한 후 결과의 prop 속성을 반환합니다. 이 방법으로 어떤 유형의 함수(익명 함수, 로컬 함수, 중첩 함수 또는 프라이빗 함수)도 호출할 수 있습니다.

예제

다음과 같은 함수가 있다고 가정해 보겠습니다.

function y = myStruct(x)
  y = struct("Afield",x);
end

이 함수는 1개의 필드 Afield가 있는 구조체를 만들어 필드에 값을 할당합니다. 다음 명령을 사용하여 함수를 호출하고 값 1을 가지는 필드가 포함된 구조체를 만들 수 있습니다.

myStruct(1)
ans = 

  struct with fields:

    Afield: 1

하지만 필드 값을 직접 반환하려는 경우에는 다음 명령을 사용하여 함수 호출 결과의 요소를 참조하면 됩니다.

myStruct(1).Afield
ans =

     1

이 명령을 실행하고 나면 명령 myStruct(1)에 의해 생성된 임시 구조체는 더 이상 존재하지 않고 MATLAB은 필드 값만 반환합니다. 개념상 이러한 사용 방법은 구조체를 만들어 구조체의 요소를 참조한 후 삭제하는 것과 동일합니다.

S = struct("Afield",1);
S.Afield
clear S

지원되는 구문

MATLAB은 foo(arg).prop에서처럼 함수 호출 결과에 점 인덱싱을 사용할 수 있도록 지원합니다. 함수 호출 결과에 다른 형식의 인덱싱을 사용하는 기능(foo(arg)(2)와 같이 괄호를 사용하거나 foo(arg){2}와 같이 중괄호를 사용하는 기능)은 지원되지 않습니다. 명령이 성공하려면 다음 기준을 충족해야 합니다.

  • foo(arg1,arg2,...)에서처럼 괄호를 사용하여 함수를 호출합니다.

  • 함수가 점 인덱싱이 정의된 변수(예: 구조체, 테이블 또는 객체)를 반환합니다.

  • 점 인덱싱 첨자가 유효합니다.

함수가 점 인덱싱이 정의되지 않은 변수를 반환하는 경우에도 MATLAB은 항상 임시 변수에 점 인덱싱 연산을 적용하려고 시도합니다. 예를 들어, magic(3)에 의해 생성된 행렬의 요소를 참조하려고 하면 오류가 발생합니다.

magic(3).field
Dot indexing is not supported for variables of this type.

임시 변수를 계속 인덱싱할 수 있는 한, 표현식의 끝에 더 많은 인덱싱 명령을 추가할 수 있습니다. 예를 들어, 다음과 같은 표현식이 있다고 가정해 보겠습니다.

table(rand(10,2)).Var1(3,:)
이 표현식에서는 테이블의 요소를 참조하여 테이블에 포함된 행렬을 가져온 다음, 행렬의 요소를 참조하여 세 번째 행을 가져옵니다.

  • table(rand(10,2))는 하나의 변수 Var1을 가진 테이블을 생성합니다. 변수에는 10×2 행렬이 포함됩니다.

  • table(rand(10,2)).Var1Var1에 포함된 10×2 행렬을 반환합니다.

  • table(rand(10,2)).Var1(3,:)Var1에 포함된 행렬의 세 번째 행을 반환합니다.

참고 항목

|

관련 항목