有没有一种方式可以在类型上定义一个公共字面量(类似C#中的public const)?显然,类型中的let绑定必须是私有的,而Literal属性不能应用于成员。
有没有一种方式可以在类型上定义一个公共字面量(类似C#中的public const)?显然,类型中的let绑定必须是私有的,而Literal属性不能应用于成员。
使用[<Literal>]属性。这可以实现您所需的魔法。此外,将literal属性放在诸如字符串之类的值上,使其可以在模式匹配中使用。例如:
// BAD - introduces new value named 'Name'
let Name = "Chris Smith"
match Console.ReadLine() with
| Name -> printfn "You entered my name! %s" Name
| _ -> printfn "You didn't enter my name"
// Good - uses the literal value, matches against the value Name
[<Literal>]
let NameLiteral = "Chris Smith"
match Console.ReadLine() with
| NameLiteral -> "You entered my name!"
| _ -> printfn "You didn't enter my name.
编辑:我看到这个问题是关于如何将这些内容放在自定义类中(而不是模块)中的。我不知道你是否可以在F#中公开一个public const / public readonly字段,我会研究一下。