[英]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.