F# - 公共文字常量

10

有没有一种方式可以在类型上定义一个公共字面量(类似C#中的public const)?显然,类型中的let绑定必须是私有的,而Literal属性不能应用于成员。

1个回答

9

使用[<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字段,我会研究一下。


谢谢。是的,关键字是“public”。 - Daniel
不确定为什么这个回答一直被投票赞成,因为它并没有回答问题(Chris甚至承认了这一事实)。 - Daniel
我的理论是,人们经常会在发现有趣的东西时点赞,即使它并没有回答问题。 - gradbot
丹尼尔,我不认为有这样的要求。您是否正试图针对需要公共字段字面值的特定API进行编程? - Chris Smith
克里斯,没有。我正在创建一个类,在C#中我会给它一个公共的const string。但是在F#中似乎找不到类似的东西。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接