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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top