При размышлении в функциональном мышлении, учитывая, что функции, как предполагается, чисты, можно прийти к заключению, что любая функция без аргументов является в основном просто значением.
Однако действительность мешает, и с различными исходными данными, мне, возможно, не понадобилась бы определенная функция, и если бы та функция является в вычислительном отношении дорогой, я хотел бы не оценить ее, если это не нужно.
Я нашел обходное решение, с помощью let func _ = ...
и называя его с func 1 или что бы то ни было, но это чувствует себя очень неидиоматичным и сбивающим с толку читателя.
Это сводится к одному вопросу: В F#, там надлежащий способ объявить функцию с нулевыми аргументами, не оценивая его на объявлении?
Обычная идиома - определить функцию, которая будет принимать один аргумент типа Unit ( let functionName () = 42
). Затем он будет вызываться как functionName ()
. (Тип единицы измерения имеет только одно значение - ()
.)
Я думаю, что вы хотите ленивый.
let resource =
lazy(
// expensive value init here
)
Затем позже, когда вам нужно прочитать значение...
resource.Value
Если вы никогда не вызовете свойство Value, код внутри блока lazy
никогда не будет запущен, но если вы его вызовете, этот код будет выполняться не более одного раза.