繁体   English   中英

如何在 F# 中定义类型成员常量?

[英]How to define type member constant in F#?

在 C# 中,可以像这样定义类型成员常量:

class Foo { public const int Bar = 600; }

IL 看起来像这样。

.field public static literal int32 Bar = int32(600)

如何在 Visual F#/FSharp 中做同样的事情?

我试过这个无济于事:

[<Sealed>]
 type Foo() =

    [<Literal>]
    let Bar = 600

我用 F# 编译器做了几个实验,下面是我的一些观察结果。 如果要创建 IL 文字,则需要将标记为Literal的值放置在模块中。 例如像这样:

module Constants = 
  [<Literal>]
  let Num = 1

作为旁注,我快速搜索了 F# 规范,似乎文字对于模式匹配非常有用,因为您可以将它们用作模式(只要它们以大写字母开头):

open Constants
match 1 with
| Num -> "1"
| _ -> "other"

现在,问题是,当您将Literal放在类型声明中时,为什么Literal行为不像您期望的那样。 我认为原因是 F# 类型声明中的let声明不能是公共的,并且只能在类/类型中可见。 我相信当您使用 C# 和 F# 内联文字值时,这也是在类型声明中完成的。 但是,由于文字不能公开,因此没有理由生成literal IL 字段,因为没有人可以访问它。

我不确定这是可能的。 事实上,我什至不认为你可以创建不可变的公共字段,更不用说常量了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM