¿Por qué ...delegados creando con Lambda Expresiones en F #
type IntDelegate = delegate of int -> unit
type ListHelper =
static member ApplyDelegate (l : int list) (d : IntDelegate) =
l |> List.iter (fun x -> d.Invoke x)
ListHelper.ApplyDelegate [1..10] (fun x -> printfn "%d" x)
no compilan, cuando:
type IntDelegate = delegate of int -> unit
type ListHelper =
static member ApplyDelegate (l : int list, d : IntDelegate) =
l |> List.iter (fun x -> d.Invoke x)
ListHelper.ApplyDelegate ([1..10], (fun x -> printfn "%d" x))
hace?
La única diferencia es que en la segunda, ApplyDelegate
toma sus parámetros como una tupla.
Esta función tiene demasiados argumentos, o se utiliza en un contexto donde no se espera una función
Gracias. ¿Qué es exactamente una "invocación de miembro" y por qué tener argumentos agrupados hace una diferencia? ¿Los miembros siempre deben tomar argumentos agrupados? –
"Miembros" son elementos que define con la palabra clave 'member', p. Ej. métodos estáticos o de instancia en algún tipo. Estos contrastan con las "funciones" que se definen a través de 'let f x = ...' o 'fun' y que son comparativamente muy estrictas (por ejemplo, no puede sobrecargar una función, pero puede sobrecargar un miembro). Los miembros probablemente siempre deberían tomar argumentos agrupados, sí; los miembros son más entidades .NET-y, en comparación con las funciones que son específicas de F #. – Brian
Los 'argumentos agrupados' hacen una diferencia porque cuando se acumula, todos los argumentos se pasan 'a la vez' al miembro, por lo que el segundo argumento es un argumento para un miembro. En el caso de los argumentos al curry, el primer argumento es un argumento para el miembro, y eso da como resultado un nuevo valor de función (no miembro), que luego toma el segundo argumento. – Brian