Rub*_*bys 35 f# functional-programming unit-type
在思考功能性思维模式时,假设函数应该是纯粹的,那么可以断定任何没有参数的函数基本上只是一个值.
然而,reallity阻碍了,并且对于不同的输入,我可能不需要某个函数,并且如果该函数在计算上是昂贵的,那么如果不需要它我不想评估它.
我找到了一个解决方法,使用let func _ = ...func 1或其他任何东西来调用它,但这对读者来说非常非惯用且令人困惑.
这归结为一个问题:在F#中,是否有一种正确的方法来声明一个零参数的函数,而没有在声明中进行评估?
sep*_*p2k 53
通常的习惯用法是定义函数以获取Unit(let functionName () = 42)类型的一个参数.它将被称为functionName ().(单位类型只有一个值,即().)
Joe*_*ler 14
我想你想要的是懒惰.
let resource =
lazy(
// expensive value init here
)
Run Code Online (Sandbox Code Playgroud)
然后当你需要读取值时......
resource.Value
Run Code Online (Sandbox Code Playgroud)
如果你从不调用Value属性,那么lazy块中的代码永远不会被运行,但如果你调用它,那么该代码将只运行一次.