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