함수 핸들
함수 핸들 (Function Handles)
함수 핸들은 다른 함수를 가리키는 포인터예요. @function-name 문법으로 정의하죠.
출처: 문서
본문
함수 핸들은 다른 함수를 가리키는 포인터이며, 다음과 같은 문법으로 정의해요.
@function-name
예를 들어,
f = @sin;
은 sin 함수를 가리키는 f라는 함수 핸들을 만들어요.
함수 핸들은 다른 함수를 간접적으로 호출하거나, quad나 fsolve 같은 다른 함수에 인자로 함수를 전달할 때 사용돼요. 예를 들어:
f = @sin;
quad (f, 0, pi)
⇒ 2
feval을 사용해 함수 핸들로 함수를 호출하거나, 간단히 함수 핸들의 이름 뒤에 인자 목록을 붙여 쓸 수 있어요. 인자가 없다면 빈 인자 목록 ()을 반드시 써야 해요. 예를 들어:
f = @sin;
feval (f, pi/4)
⇒ 0.70711
f (pi/4)
⇒ 0.70711
is_function_handle은 인자가 함수 핸들이면 true를 반환해요.
functions는 함수 핸들에 대한 정보를 담은 구조체를 반환해요. 이 구조체에는 항상 다음 세 필드가 들어 있어요:
function: 함수 이름. 익명 함수(이름 없음)의 경우 실제 함수 정의가 돼요.type: 함수의 타입 (anonymous,private,overloaded,simple,subfunction,nested등).file: 함수를 수행하기 위해 호출될 m-file. 익명 함수와 내장 함수의 경우 이 필드는 비어 있어요.
경고: functions는 디버깅 목적으로만 제공돼요. 동작이 미래에 바뀔 수 있으므로 프로그램이 특정 출력 형식에 의존해서는 안 돼요.
func2str은 함수 핸들이 가리키는 함수의 이름을 담은 문자열을 반환해요. str2func는 문자열에서 함수 핸들을 만들어요.
hfcn = @sin ;
hfcn = @(x) sin (x + pi) ;
프로그래밍 주의: 대부분의 경우 str2func를 쓰기보다 익명 함수 문법을 써서 Octave 파서가 함수 핸들을 만들게 하는 게 더 좋아요.
symvar는 문자열에서 기호 변수 이름을 식별해요. i, j, pi, Inf 같은 흔한 상수 이름과 sin이나 plot 같은 Octave 함수는 무시돼요. 식별된 이름들은 문자열 셀 배열로 반환되며, 변수가 없으면 배열은 비어 있어요.
symvar ("x^2 + y^2 == 4")
⇒ {
[1,1] = x
[2,1] = y
}
더 알아보기
- 익명 함수에 대한 내용을 이어서 보면 좋아요.
isa,class,func2str,str2func함수도 함께 살펴보세요.