IDL에서 FUNCTION 부프로그램을 만들면 항상 끝부분에서 RETURN이란 명령을 사용하여 값을 돌려주도록 하는 방법이 사용됩니다. 예를 들면 다음과 같은 방식입니다.
FUNCTION MY_FUNC, a, b
val = a+b
RETURN, val
END
이 함수 부프로그램을 사용하면 다음과 같이 두 인자값의 합을 돌려받게 됩니다.
result = MY_FUNC(3, 4)
PRINT, result
7
그런데 함수 부프로그램내에서 여러 개의 결과값들을 생성하고 이 값들을 모두 돌려주도록 하려면 어떻게 하면 될까요? 사실 RETURN 명령이 받을 수 있는 인자는 단 하나뿐입니다. 따라서 다음과 같은 방식은 허용되지 않습니다.
FUNCTION MY_FUNC, a, b
val1 = a+b
val2 = a*b
RETURN, val1, val2; 허용되지 않음!
END
FUNCTION MY_FUNC, a, b
val1 = a+b
val2 = a*b
result = [val1, val2]
RETURN, result
END
result = MY_FUNC(3, 4)
PRINT, result[0]
7
그러면 이 함수를 사용한 결과에 대하여 배열 인덱싱을 해서 원하는 값을 취할 수 있습니다. 그런데 이 방법은 한계가 있습니다. 배열을 만들려면 그 배열안에는 하나의 자료형(Type)만 허용이 됩니다. 정수, 실수, 문자든 하나의 자료형인 값들만이 하나의 배열로 포함이 가능합니다. 따라서 만약 돌려줄 값들이 다양한 자료형들을 갖는 경우에는 이 방법은 사용할 수 없습니다. 물론 다른 방법이 있습니다. 바로 구조체(Structure)를 활용하는 것입니다. 다음은 숫자 및 문자 등으로 구성된 결과값들로 구조체를 구성해서 이 구조체를 돌려주게 하는 함수 부프로그램의 예입니다.
FUNCTION MY_FUNC, a, b
val1 = a+b
val2 = a*b
str = 'Success'
result = {val1:val1, val2:val2, str:str}
RETURN, result
END
result = MY_FUNC(3, 4)
PRINT, result.val1
7
'IDL > Programming' 카테고리의 다른 글
날짜와 관련된 문제 해결 사례를 소개합니다 (예고) (0) | 2014.02.24 |
---|---|
CV_COORD 함수에 대하여 (0) | 2014.02.19 |
17,000을 숫자로 제대로 읽으려면? (0) | 2013.10.02 |
2바이트 유니코드 문자(한, 중, 일 언어) 처리의 예 (0) | 2013.08.14 |
삼각함수의 사용에 있어서 유의할 점들 (0) | 2013.07.04 |