F # - Función sin argumentos?
-
04-10-2019 - |
Pregunta
Cuando se piensa en un estado mental funcional, dado que las funciones se supone que deben ser puros, se puede concluir cualquier función sin argumentos es, básicamente, sólo un valor.
Sin embargo, reallity se interpone en el camino, y con diferentes entradas, que podría no necesitar una cierta función, y si esa función es computacionalmente caro, me gustaría no evaluarlo si no es necesario.
He encontrado una solución, utilizando let func _ = ...
y llamándolo con func 1 o lo que sea, pero que se siente muy no-idiomática y confundir al lector.
Esto se reduce a una pregunta:? En F #, ¿Hay una forma correcta de declarar una función con cero argumentos, sin tener que evaluarse sobre la declaración
Solución
El idioma habitual es definir la función para tomar un argumento de tipo unitario (let functionName () = 42
). A continuación, se llama como functionName ()
. (El tipo de unidad tiene solamente un valor, que es ()
.)
Otros consejos
Creo que lo que quiere es perezoso .
let resource =
lazy(
// expensive value init here
)
Luego, más tarde cuando se necesita para leer el valor ...
resource.Value
Si nunca llama a la propiedad del valor, el código dentro del bloque lazy
nunca se ejecuta, pero si lo hace llamarlo, ese código será no más de una vez ejecutado.