apply

Llama a una función pasándole una List de argumentos como parámetros posicionales.

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

Lección

apply existe para esos momentos en los que los argumentos de una llamada no están en variables sueltas — ya vienen recogidos en una List (parseada de una entrada, sacada de una configuración, producida por juxt) y necesitas invocar con ellos una función arbitraria. Por dentro es una envoltura mínima sobre el propio Function.apply de Dart, con el resultado convertido a R.

Como f está tipada simplemente como Function, apply es dinámico por naturaleza: Dart no puede comprobar el número ni los tipos de los argumentos contra la firma de f en tiempo de compilación, solo en tiempo de ejecución. Recurre a él únicamente cuando de verdad tengas una lista dinámica de argumentos; para todo lo demás, llama a la función directamente.

Un asunto relacionado pero distinto es la currificación — rellenar de antemano algunos argumentos de una función. FxTS tiene un curry totalmente genérico; el sistema de tipos de Dart no tiene equivalente para aridades arbitrarias, así que FxDart solo incluye un stub @Deprecated de curry para dos argumentos como ayuda a la migración. Es preferible que escribas tú el closure: (b) => f(a, b).

Demo 1 · Fundamentos

Demo 2 · Despachar llamadas dinámicas

Un pequeño despachador de comandos, donde cada manejador tiene una aridad distinta y los argumentos llegan como una List en tiempo de ejecución:

Pruébalo tú

Ejercicio: llama a greet más abajo usando apply con la lista de argumentos ['Kim', 'Hello'].

Relacionado: juxt — a menudo el origen de una lista dinámica de argumentos · tap — ejecuta un efecto secundario sin cambiar el valor · cases — despacha por predicados en lugar de por nombre · pipe — composición dinámica, con el mismo compromiso que apply