2012-01-13 7 views
9

He oído que habrá una nueva sintaxis en DMD 2.058 para funciones anónimas, pero no puedo encontrar ninguna información sobre ella. ¿Cuál es la nueva sintaxis y la vieja sintaxis va a ser desaprobada?¿Cuál es la nueva sintaxis lambda?

Respuesta

13

Creo que es como C#'s.

Los siguientes son equivalentes:

delegate(i, j) { return i + j; } 
(i, j) => i + j 

como son:

delegate(i) { return i; } 
(i) => i 
i => i // Can leave off parentheses 

como son:

delegate(int i) { return i; } 
(int i) => i 

aunque no estoy seguro de si los tipos de retorno explícito también se apoyan en la nueva sintaxis

+0

parece un poco tonto para preguntar, pero supongo '(x) => {return x;} forma' también es compatible? Es decir, ¿es válido usar el operador con un bloque de enunciado delimitado por llaves? – CodexArcanum

+0

@CodexArcanum: No estoy seguro. – Mehrdad

7

No se está eliminando la funcionalidad actual de lambda. Es solo que se está introduciendo una nueva sintaxis de Terser para aquellos que lo quieran. Como Merhdad says, es esencialmente la sintaxis de C#, aunque no sé si es 100% idéntico.

Así que en lugar de hacer algo así como

auto found = find!((a){return func(a) == value;})(range); 

haces algo como

auto found = find!(a => func(a) == value)(range); 
Cuestiones relacionadas