Como Darío señala, una característica como la sintaxis _.Foo()
en Scala no está actualmente disponible en F #, por lo que tendrá que escribir una función lambda explícitamente usando fun a -> a.Foo()
.
Por lo que sé, una pregunta como esta aparece de vez en cuando en las discusiones de F #, por lo que seguramente fue considerada por el equipo de F #. Es un poco complicado (por ejemplo, ¿desea permitir solo el uso de miembros u otros usos, por ejemplo, _ + 10
, y cuál sería el alcance de la expresión lambda?) Además, el valor de la función es relativamente bajo en comparación con otras cosas que podrían ser hecho ... De todos modos, sería bueno tenerlo!
Esta también puede ser una razón por la cual muchos tipos de F # exponen las operaciones como miembros (utilizables en el estilo OO) y funciones en un módulo (para el estilo funcional). Creo que podrías considerarlo como una buena práctica F # (pero depende de tus preferencias de diseño). Ej .:
type Foo(a:int) =
member x.Add(b:int) = a + b
// Attribute allows you to define module with the same name
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module Foo =
let add b (v:Foo) = v.Add(b)
continuación, puede utilizar tanto fun v -> v.Add(10)
y Foo.add 10
para crear un valor de función. Desafortunadamente, el tipo String
no tiene el módulo correspondiente con todas las funciones en las bibliotecas centrales F #, por lo que tendría que escribirlo usted mismo.
'(fun s -> s.toupper())' – Brian
... o 'let toUpper (s: string) = s.ToUpper()' si desea definir una función nombrada. –
@Tomas, sí, eso es lo que estaba buscando, olvidé la definición de tipo. – Benjol