2008-09-04 16 views
6

¿Es posible pasar una referencia a una función a otra función en F #? En concreto, me gustaría pasar a las funciones lambda comoFunciones de paso en F #

foo (divertido x -> x ** 3)

Más específicamente, necesito saber cómo iba a referirse a la función pasada en una función que yo escribí yo mismo

Respuesta

4

Sí, es posible. El manual tiene este ejemplo:

> List.map (fun x -> x % 2 = 0) [1 .. 5];; 

val it : bool list 
= [false; true; false; true; false] 
2

Las funciones son ciudadanos de primera clase en F #. Por lo tanto, puedes pasarlos como quieras.

Si usted tiene una función como esta:

let myFunction f = 
    f 1 2 3 

y f es la función, entonces el valor de retorno de myFunction es f aplicado a 1,2 y 3.

+0

lo que si quieres dos funciones como entrada a myFunction? – Nulle

+1

Entonces solo deja que myFunction f1 f2 = ... – nickd

2

Passing una función lambda a otra función funciona así:

Supongamos que tenemos una función trivial propia de la siguiente manera:

let functionThatTakesaFunctionAndAList f l = List.map f l 

ya se puede pasar una función lambda y una lista a la misma:

functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0] 

Dentro de nuestra propia función functionThatTakesaFunctionAndAList que sólo puede referirse a la función lambda como f porque tuvo que llamar al primer parámetro f.

El resultado de la llamada a la función es, por supuesto:

float list = [1.0; 8.0; 27.0] 
Cuestiones relacionadas