F# - 没有参数的函数?

时间:2010-05-09 12:55:52

标签: f# functional-programming unit-type

当考虑功能性思维模式时,假设函数应该是纯粹的,那么可以断定任何没有参数的函数基本上只是一个值。
然而,reallity阻碍了,并且对于不同的输入,我可能不需要某个函数,并且如果该函数在计算上是昂贵的,那么如果不需要它我不想评估它。
我找到了一个解决方法,使用let func _ = ...并使用func 1或其他任何方式调用它,但这感觉非常非惯用并且让读者感到困惑。

这归结为一个问题:在F#中,是否有一种正确的方法来声明一个零参数的函数,而没有在声明中对它进行评估?

2 个答案:

答案 0 :(得分:52)

通常的习惯用法是将函数定义为采用Unit(let functionName () = 42)类型的一个参数。然后将其称为functionName ()。 (单位类型只有一个值,即()。)

答案 1 :(得分:14)

我认为你想要的是lazy

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

然后当你需要读取值...

resource.Value

如果你从不调用Value属性,lazy块中的代码永远不会运行,但是如果你调用它,那么该代码将运行不超过一次。