当考虑功能性思维模式时,假设函数应该是纯粹的,那么可以断定任何没有参数的函数基本上只是一个值。
然而,reallity阻碍了,并且对于不同的输入,我可能不需要某个函数,并且如果该函数在计算上是昂贵的,那么如果不需要它我不想评估它。
我找到了一个解决方法,使用let func _ = ...
并使用func 1或其他任何方式调用它,但这感觉非常非惯用并且让读者感到困惑。
这归结为一个问题:在F#中,是否有一种正确的方法来声明一个零参数的函数,而没有在声明中对它进行评估?
答案 0 :(得分:52)
通常的习惯用法是将函数定义为采用Unit(let functionName () = 42
)类型的一个参数。然后将其称为functionName ()
。 (单位类型只有一个值,即()
。)
答案 1 :(得分:14)
我认为你想要的是lazy。
let resource =
lazy(
// expensive value init here
)
然后当你需要读取值...
resource.Value
如果你从不调用Value属性,lazy
块中的代码永远不会运行,但是如果你调用它,那么该代码将运行不超过一次。