如何在 F# 中定义常量字面值

3

在C#中,我这样做:

 public const double PAPER_SIZE_WIDTH = 8.5 * 96; 

什么是在F#中定义全局常量的最佳方式?

下面的方法会失败:

  [<Literal>]
  let PaperSizeWidth = 8.5*96.0  

错误:这不是有效的常量表达式
TIA

1
在库中定义public const不良实践。您可以预先计算值并编写let PaperSizeWidth = 816,并留下注释说明如何获得此数字。它将编译为静态只读属性,并在运行时由JIT内联。如果应用了[<Literal>],它将编译为public const,但如上所述-这是不良实践。 - JL0PD
1
我必须反对这是不好的做法。我也看了链接,那里描述的只是任何明智的开发人员不会犯的错误的例子。 - Bent Tranberg
1个回答

6

在F#中,数字字面量还不支持算术运算。相反,您必须显式提供最终值:

[<Literal>]
let PaperSizeWidth = 816.0

然而,在F#中,默认情况下,每个值都是不可变的,因此根据您的需求,这可能已经足够好了:

let PaperSizeWidth = 8.5 * 96.0

1
这不是一个好的回答,因为在C#中使用const关键字的等价物确实是在F#中使用[<Literal>]属性。我们称字面量为字面量,而不是常量,否则会引起混淆。 - Bent Tranberg
1
好的,我忘了C#中的常量在编译时计算。F#目前不支持类似的文字算术。请参见我的答案中的链接。 - Brian Berns
1
抱歉,你的回答比我最初想象的更加详细。但我想建议你也添加计算表达式的替代方案,并编写 let [<Literal>] PaperSizeWidth = 816。 - Bent Tranberg
我同意。我明天会更新/澄清它。 - Brian Berns

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