F# - Функция без аргументов?

При размышлении в функциональном мышлении, учитывая, что функции, как предполагается, чисты, можно прийти к заключению, что любая функция без аргументов является в основном просто значением.
Однако действительность мешает, и с различными исходными данными, мне, возможно, не понадобилась бы определенная функция, и если бы та функция является в вычислительном отношении дорогой, я хотел бы не оценить ее, если это не нужно.
Я нашел обходное решение, с помощью let func _ = ... и называя его с func 1 или что бы то ни было, но это чувствует себя очень неидиоматичным и сбивающим с толку читателя.

Это сводится к одному вопросу: В F#, там надлежащий способ объявить функцию с нулевыми аргументами, не оценивая его на объявлении?

35
задан Guy Coder 29 February 2016 в 14:43
поделиться

2 ответа

Обычная идиома - определить функцию, которая будет принимать один аргумент типа Unit ( let functionName () = 42 ). Затем он будет вызываться как functionName () . (Тип единицы измерения имеет только одно значение - () .)

53
ответ дан 27 November 2019 в 07:01
поделиться

Я думаю, что вы хотите ленивый.

let resource = 
    lazy(
        // expensive value init here
    )

Затем позже, когда вам нужно прочитать значение...

resource.Value

Если вы никогда не вызовете свойство Value, код внутри блока lazy никогда не будет запущен, но если вы его вызовете, этот код будет выполняться не более одного раза.

14
ответ дан 27 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: