首页 > 解决方案 > 这些从未更改(或仅在开始时更改一次)设置的模块属性?

问题描述

我有以下模块,基本上,参数yyyyMMdd,optionsfolder被传递给很多要使用的函数。它只会被分配/更改main一次,或者永远不需要更新(folder, options)。

如何实现 F# 模块的“属性”,这样就不需要让所有这些函数都具有这些参数?

module X

let a theDate x options = .... // aDate is used here

let b theDate x folder options = a theDate 30 options //....

let c theDate folder options = b theDate 100 folder options //... other statements omitted. 

let main yyyyMMdd folder options =
    let aDate = .... // convert yyyyMMdd to type DateTime
    ...
    c aDate folder
    ...

更新:我为它定义了带有静态成员的以下类型。它是 F# 惯用的吗?

type Settings() =
    static member val TheDate= DateTime.MaxValue with get, set
    static member val Folder = "" with get, set
    static memeber val Options = ??? with get, set

标签: f#

解决方案


可变的 let 绑定可以满足您的要求:

module MyModule =
    let mutable myMutableValue = 42

    let f1 a b = ... // you can use myMutableValue inside

然后,要对其进行变异,请执行MyModule.myMutableValue <- xyz.

请注意,尽管在模块中具有全局可变变量不是惯用的 F#。但是,在不了解您要完成的工作的情况下,很难提供更好的建议,但是如果我还是要给出建议,我会说您应该将其保留为所有这些功能的参数(您会感谢当您没有竞争条件和其他与可变性相关的错误时,您自己稍后)。


推荐阅读