El segundo escenario consistía en crear la función directamente como argumento de la función List.Select. Es decir:
numbers = {-2, 0, 1, -4, 5, -2}
in
List.Select(
numbers,
(n) => n > 0
)
En este caso no es necesario asignar la función a una variable (el código devolvería un error si lo hiciésemos, de hecho) -es decir, tiene que ser una función anónima-, pero el enfoque hasta aquí es perfectamente conocido.
Y, de igual forma que hemos usado n como nombre de variable, también podríamos usar el símbolo _:
numbers = {-2, 0, 1, -4, 5, -2}
in
List.Select(
numbers,
(_) => _ > 0
)
A pesar del cambio, la naturaleza del código es la misma: nuestra función (_) => _ > 0 va a ser aplicada a una lista de valores y, para cada valor que se le pase, devolverá true o false en función de que se cumpla o no la condición indicada.
Pues bien, esta referencia a funciones que reciben un único argumento es tan común que Microsoft nos permite sustituir el bloque (_) => por la palabra reservada each (traducible por "cada" en español):
numbers = {-2, 0, 1, -4, 5, -2}
in
List.Select(
numbers,
each _ > 0
)
Como se suele decir, each es azúcar sintáctico (sintantic sugar en inglés) para la expresión (_) => (es decir, un añadido a la sintaxis de M para hacer su uso más sencillo).
Y la naturaleza de nuestra función es la misma: para cada valor que reciba va a devolver un cierto resultado.
Tenemos que entender que, en este contexto, el símbolo _ adquiere un significado bien concreto: representa el argumento que recibe nuestra función, y si queremos hacer referencia a dicho valor, tendremos que usar la variable _ y no otra.
Pongamos otro ejemplo: Supongamos que el código de nuestra consulta fuese el siguiente:
numbers = {-2, 0, 1, -4, 5, -2}
in
List.Select(
numbers,
each true
)
Ahora, para cada uno de los valores de entrada de nuestra función anónima (representados por _ aunque, en este caso, no estamos haciendo referencia a ellos) estamos devolviendo el valor true. Es decir, se van a seleccionar todos los valores de la lista: