다음: 구조체 다루기, 이전: 구조체 배열, 상위 문서: 구조체   [차례][찾아보기]


6.1.3 구조체 만들기

탐색 연산자 "." 외에도, 옥타브에서는 구조체를 만드는 데에 능동 명명 "(변수)"struct 함수가 가능합니다. 능동 명명은 기록란 이름으로 변수의 문자열 값을 사용합니다. 예시입니다.

a = "field2";
x.a = 1;
x.(a) = 2;
x
     ⇒ x =
        {
          a =  1
          field2 =  2
        }

능동 명명에는 올바른 옥타브 식별자 뿐만 아니라 임의의 문자열을 사용하여도 됩니다.(매트랩에서 작동하지 않음에 유의하십시오.)

a = "long field with spaces (and funny char$)";
x.a = 1;
x.(a) = 2;
x
     ⇒ x =
        {
          a =  1
          long field with spaces (and funny char$) =  2
        }

경고 식별자 Octave:language-extension가 위 용법에 대한 경고를 할 수 있습니다. 경고 식별자를 참고하십시오.

실제로는 문자열을 다루는 모든 함수를 기록란이 자료 구조체에 들어가기 전까지 기록란 이름을 만드는 데에 사용하여도 됩니다.

names = ["Bill"; "Mary"; "John"];
ages  = [37; 26; 31];
for i = 1:rows (names)
  database.(names(i,:)) = ages(i);
endfor
database
     ⇒ database =
        {
          Bill =  37
          Mary =  26
          John =  31
        }

구조체를 만드는 세 번째 방법은 struct 명령입니다. struct는 여러 매개변수 쌍을 받아 첫 번째 매개변수는 구조체에 넣을 기록란 이름으로 쓰고, 두 번째 매개변수는 스칼라나 낱칸 배열로써 구조체나 구조체 배열에 넣을 값으로 사용합니다. 예시입니다.

struct ("field1", 1, "field2", 2)
⇒ ans =
      {
        field1 =  1
        field2 =  2
      }

스칼라와 낱칸 배열이 혼합된 값을 struct에 넣으면, 스칼라 매개변수를 확장하여 같은 크기의 구조체 배열을 만듭니다. 예시입니다.

s = struct ("field1", {1, "one"}, "field2", {2, "two"},
        "field3", 3);
s.field1
     ⇒
        ans =  1
        ans = one

s.field2
     ⇒
        ans =  2
        ans = two

s.field3
     ⇒
        ans =  3
        ans =  3

개별 기록란에 낱칸 배열을 넣은 구조체를 만드려면, 아래 예시처럼 넣을 낱칸 배열을 다른 낱칸 배열이 품어야 합니다.

struct ("field1", {{1, "one"}}, "field2", 2)
     ⇒ ans =
        {
          field1 =

        {
          [1,1] =  1
          [1,2] = one
        }

          field2 =  2
        }
s = struct ()
s = struct (기록란1, 값1, 기록란2, 값2, …)
s = struct (객체)

스칼라 구조체나 배열 구조체를 만들고 값을 초기화 합니다.

기록란1, 기록란2, … 변수는 기록란의 이름을 정하는 문자열이고, 값1, 값2, … 변수는 모든 자료형이 가능합니다.

값이 낱칸 배열이면, 구조체 배열을 만들고, 그 값으로 초기화 합니다. 값에 지정한 각 낱칸 배열의 크기는 반드시 같아야 합니다. 홑낱칸과 낱칸 배열이 아닌 값은 복제되어 전체 배열을 채웁니다. 빈 낱칸은 지정한 기록란 이름을 가진 빈 구조체 배열을 만듭니다.

매개변수가 객체이면, 해당 객체에 속한 구조체를 반환합니다.

구조체 배열에서 구문이 최적환된 것을 보십시오. 아래 예시를 따르는 것이 좋습니다.

struct ("foo", 1)
  ⇒ scalar structure containing the fields:
    foo =  1

struct ("foo", {})
  ⇒ 0x0 struct array containing the fields:
    foo

struct ("foo", { {} })
  ⇒ scalar structure containing the fields:
    foo = {}(0x0)

struct ("foo", {1, 2, 3})
  ⇒ 1x3 struct array containing the fields:
    foo

첫 번째 예시는 기록란과 값이 한 개인 일반적인 스카라 구조체입니다. 두 번째 예시는 구조체 배열 값로 빈 낱칸 배열이 입력되었기 때문에 기록란이 한 개이고 값이 없는 빈 구조체 배열을 만듭니다. 값으로 낱칸이 하나인 낱칸 배열을 사용하면, 기록란의 값으로 낱칸을 사용하는 스칼라 구조체를 만듭니다. 해당 낱칸은 빈 낱칸 배열이 됩니다.

마지막으로 값이 스칼라가 아닌 낱칸 배열이면, struct는 구조체 배열을 만듭니다.

같이 보기: cell2struct, fieldnames, getfield, setfield, rmfield, isfield, orderfields, isstruct, structfun.

함수 isstruct를 객체가 구조체나 구조체 배열인지 검사하는 데에 사용할 수 있습니다.

isstruct (가로)

가로가 구조체이거나 구조체 배열이면 참을 반환합니다.

같이 보기: ismatrix, iscell, isa.


다음: 구조체 다루기, 이전: 구조체 배열, 상위 문서: 구조체   [차례][찾아보기]