.net – 如何在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不會像您在型別宣告中放置時所期望的那樣.我認為原因是,在F#型別宣告中的let宣告不能被公開,並且只能在類/型別內部可見.我相信當你使用它們時,C#和F#的內聯字面值都是型別宣告.然而,由於文字不能公開,所以沒有任何理由可以生成字面的IL欄位,因為沒有人可以訪問它.
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/2399917/how-to-define-type-member-constant-in-f