apply
Llama a una función pasándole una List de argumentos como parámetros posicionales.
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'].