apply

인자가 담긴 List를 위치 파라미터로 넘겨 함수를 호출합니다.

R apply<R>(Function f, List<Object?> args)

강의

apply는 호출에 넘길 인자들이 개별 변수로 흩어져 있지 않고 이미 List에 모여 있을 때를 위한 함수입니다(입력에서 파싱했거나, 설정에서 모았거나, juxt가 만들어 낸 경우처럼) — 그 인자들로 임의의 함수를 호출해야 할 때 씁니다. 내부적으로는 Dart의 Function.apply를 얇게 감싸고 결과를 R로 캐스팅한 것입니다.

f의 타입이 그냥 Function이기 때문에 apply는 본질적으로 동적입니다 — Dart는 인자 개수나 타입을 f의 시그니처와 대조해 컴파일 타임에 검사할 수 없고, 런타임에만 확인합니다. 정말로 동적인 인자 목록을 다룰 때만 꺼내 쓰고, 그 밖의 경우에는 함수를 직접 호출하세요.

관련은 있지만 별개의 주제로 커링이 있습니다 — 함수의 일부 인자를 미리 채워 두는 것이죠. FxTS에는 완전한 제네릭 curry가 있지만 Dart의 타입 시스템에는 임의의 인자 개수를 다룰 방법이 없어서, FxDart는 마이그레이션 보조용으로 @Deprecated 처리된 2인자 curry 스텁만 제공합니다. 클로저를 직접 작성하는 편이 낫습니다: (b) => f(a, b).

데모 1 · 기본

데모 2 · 동적 호출 디스패치하기

핸들러마다 인자 개수가 다르고 인자는 런타임 List로 들어오는 간단한 커맨드 디스패처입니다:

직접 해 보기

연습: 아래 greet를 인자 목록 ['Kim', 'Hello']와 함께 apply로 호출해 보세요.

관련 항목: juxt — 동적 인자 목록이 만들어지는 대표적인 출처 · tap — 값을 바꾸지 않고 부수 효과만 실행 · cases — 이름 대신 술어로 디스패치 · pipe — 동적 조합, apply와 같은 트레이드오프