2009-12-02 2 views
8

タイプにパブリックリテラル(C#のパブリックconst)を定義する方法はありますか?明らかに、型のバインディングはプライベートでなければならず、Literal属性はメンバーには適用できません。F# - パブリックリテラル

答えて

9

[<リテラル>]属性を使用してください。これは、あなたが探している魔法です。さらに、リテラル属性を文字列などの値に置くと、パターンマッチングで使用することができます。例:

// BAD - introduces new value named 'Name' 
let Name = "Chris Smith" 

match Console.ReadLine() with 
| Name -> printfn "You entered my name! %s" Name 
| _ -> printfn "You didn't enter my name" 

// Good - uses the literal value, matches against the value Name 
[<Literal>] 
let NameLiteral = "Chris Smith" 
match Console.ReadLine() with 
| NameLiteral -> "You entered my name!" 
| _ -> printfn "You didn't enter my name. 

編集:私は、カスタムクラス(モジュールではありません)にこれらを入れる方法を指摘しています。あなたがF#内でpublic const/public readonlyフィールドを公開できるかどうかはわかりませんが、私はそれを調べます。

+0

ありがとうございました。はい、キーは「公開」です。 – Daniel

+0

この回答が質問に回答しないため、この回答が投票され続ける理由がわかりません。 – Daniel

+0

私の理論は、質問に答えていなくても面白いものが見つかると、投票を頻繁に行うということです。 – gradbot