簡體   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