f# - 这些从未更改(或仅在开始时更改一次)设置的模块属性?
问题描述
我有以下模块,基本上,参数yyyyMMdd
,options
和folder
被传递给很多要使用的函数。它只会被分配/更改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
解决方案
可变的 let 绑定可以满足您的要求:
module MyModule =
let mutable myMutableValue = 42
let f1 a b = ... // you can use myMutableValue inside
然后,要对其进行变异,请执行MyModule.myMutableValue <- xyz
.
请注意,尽管在模块中具有全局可变变量不是惯用的 F#。但是,在不了解您要完成的工作的情况下,很难提供更好的建议,但是如果我还是要给出建议,我会说您应该将其保留为所有这些功能的参数(您会感谢当您没有竞争条件和其他与可变性相关的错误时,您自己稍后)。
推荐阅读
- go - 未映射到对象的多对多对象文件
- python-3.x - With Statement inside functions
- javascript - 更改整行的颜色
- python - 使用 python 将 .csv 文件中的元素求和到文件中
- apache-kafka - 如何为所有消费者组授予融合 iam acl
- c - 为什么这段代码可以在我的本地机器上运行,但不能在 Leetcode 上运行?
- python - Python excel下拉过滤器不适用于openpyxl或xlsxwriter
- javascript - Laravel:给 longText 字段一个默认值
- amazon-web-services - 如何找出哪个日志组的 CloudWatch GetMetricData 成本?
- python - 熊猫:groupby 使用 numba 申请