이름 있는 함수와 람다는 매개변수, 기본값, 가변 인수, 제네릭 제약, 이름 있는 인수를 같은 호출 규칙으로 처리합니다.
정책
함수는 매개변수 타입을 반드시 적고 반환 타입은 생략할 수 있습니다. 매개변수는 변경할 수 없습니다. 기본값은 리터럴이나 const 표현식이며 다른 매개변수를 참조할 수 없습니다. 마지막 가변 매개변수는 ...name: T로 적고 함수 안에서 Array<T>로 받습니다. 람다는 =>를 사용하며 문맥에서 매개변수 타입을 추론합니다.
명시된 동작
호출할 때는 호출 대상을 한 번 계산한 뒤 위치 인수와 스프레드 인수를 왼쪽에서 오른쪽으로 평가하고, 마지막에 이름 있는 인수를 연결합니다. 배열 스프레드는 고정 매개변수가 모두 채워진 뒤에만 가변 인수로 들어갈 수 있습니다. 명시적 타입 인수는 값 인수와 기대 반환 타입에 앞서 추론에 사용되며 모든 정보가 서로 일치해야 합니다.
제약과 명시적 거부
args: ...T, 마지막이 아닌 가변 인수, 이름 있는 인수 뒤의 위치 인수, 고정 매개변수로의 스프레드, 중복되거나 누락된 인수, 익명 function(...) {} 표현식은 거부됩니다. 제네릭 제약은 이름 있는 함수의 타입 매개변수에서만 선언할 수 있습니다.
유예 경계
고위 다형성, 제네릭 람다, 타입 매개변수 기본값, 제네릭 수신자 메서드, 동적 프로토콜 배치, 임의의 trait 제약은 아직 포함되지 않습니다.
예제
TOPAZ
function head<T>(values: Array<T>) -> Option<T> {
match values {
case [] => None
case [first, ..] => Some(first)
}
}
let first: Option<int> = head([1, 2, 3])