这个问题很相似,但我没有看到令我满意的答案。
那么,等效项public static readonly string Name = ...;在 F# 中看起来如何?
我可以定义static member Name = ...,但这会创建静态只读属性。
我认为没有办法在 F# 中获取公共静态只读字段。
如果您使用static let,您最终会得到一个私有字段(事实上,我认为这实际上被编译为具有私有静态属性的私有字段Xyz):
type B() =
static let Xyz = 1
Run Code Online (Sandbox Code Playgroud)
您可以使用 定义实际字段val,但这不支持初始化(因此您需要在静态构造函数中设置它)并且编译器要求此类字段是私有的:
type A() =
static do A.Xyz <- 1
[<DefaultValue>]
static val mutable private Xyz : int
Run Code Online (Sandbox Code Playgroud)
如果您尝试创建该字段public,您将得到:
错误 FS0881:类型中的静态“val”字段必须是可变的、私有的并用“[]”属性标记。它们被初始化为其类型的“空”或“零”值。还可以考虑在类类型中使用“static let mutable”绑定。
我认为错误消息可以回答您的问题。也就是说,我想不出为什么需要静态公共字段的充分理由 -let模块中的绑定通常应该涵盖静态公共字段可能拥有的用例(除非您需要这个,因为某些库会寻找静态通过反射的公共领域...)。