5.11 지역 함수(Local Functions)
5.11 지역 함수(Local Functions)
Haxe는 일급 함수(first-class functions)를 지원하며 표현식 안에서 지역 함수를 선언할 수 있어요. 구문은 클래스 필드 메서드(class field methods)를 따릅니다:
class Main {
static public function main() {
var value = 1;
function myLocalFunction(i) {
return value + i;
}
trace(myLocalFunction(2)); // 3
}
}
main 클래스 필드의 블록 표현식(block expression) 안에서 myLocalFunction을 선언해요. 하나의 인자 i를 받아, 바깥 스코프에서 정의된 value에 더합니다.
스코프는 변수(variables)와 동일하며, 대부분의 경우 이름 있는 지역 함수를 쓰는 것은 이름 없는 지역 함수를 지역 변수에 할당하는 것과 같게 볼 수 있어요:
var myLocalFunction = function(a) { }
하지만 타입 매개변수와 함수의 위치와 관련된 몇 가지 차이가 있어요. 선언 시 어떤 것에도 할당되지 않으면 "lvalue" 함수라고 하고, 그렇지 않으면 "rvalue" 함수라고 합니다.
- Lvalue 함수는 이름이 필요하고 타입 매개변수(type parameters)를 가질 수 있어요.
- Rvalue 함수는 이름을 가질 수 있지만 타입 매개변수를 가질 수 없어요.
출처: Local Functions
본문
지역 함수 선언
함수는 표현식 안에서 function 키워드로 선언할 수 있어요. 바깥 스코프의 변수를 클로저로 캡처할 수 있습니다. 스코프 규칙은 변수와 동일합니다.
lvalue와 rvalue 함수
할당되지 않은 선언(lvalue)은 이름이 필요하고 타입 매개변수를 가질 수 있어요. 할당되는 함수(rvalue)는 이름은 가능하지만 타입 매개변수는 가질 수 없어요.