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