2016-12-22 9 views
3

この質問は、keywords as identifiersではなく、識別子の文字についてです。F#識別子、モジュール、タイプ、メンバー名にはどのような文字が使用できますか?

this question on C# namesが見つかりましたが、F#で同じことが容易に見つかりませんでした。通常、これはほとんど関連性があるが、私のテストでは、私はしばしばドット.を使用し、それがモジュール名でサポートされていませんでしたが、let束縛でサポートされて驚いたの命名:テストに名前を付けるの外

// fails: 
module ``Run Test.Me functions`` = 
    [<Test>] 
    let ``X.Add should add``() = test <@ X.Add 2 2 = 4 @> 

// Succeeds 
module ``Run Test-Me functions`` 
    [<Test>] 
    let ``X.Add should add``() = test <@ X.Add 2 2 = 4 @> 

私はこれにはあまり使われていませんが、タイプとモジュール名でサポートされている文字は何ですか?

一部のテスト:

module ``Weird.name`` =() // fails 
module ``Weird-name`` =() // succeeds 
module ``Weird()name`` =() // succeeds (?) 
module ``Weird*name`` =() // fails 
module ``Weird+name`` =() // fails 
module ``Weird%name`` =() // succeeds (?) 
module ``Weird/name`` =() // fails 
module ``Weird\\name`` =() // fails 

これらの名称はすべてではなく、タイプ名やモジュール名など、聞かせて結合またはメンバー名に成功しました。少なくともそれは一貫しています。しかし、私は許可されているものとないものを見つけることができません。

おそらくF#自体ではなくCLR/MSILによって制限が課されるのでしょうか?

+0

@guy、私は他の画面で開かれたlang仕様を持っていることがありますが、なぜ私はそれを見つけなかったのでしょうか。あなたはそれを答えに変えたいと思うかもしれませんが、たとえ誰かがスペックでそれを見つけることができたとしても、Q&Aとしてここに置くことは悪いはずはないと思ってください(しかし、正直なところ、読みにくいです!) – Abel

答えて

4

F# Language Specification 4.0 - セクション3.4 Identifiers and Keywordsをご覧ください。

識別子がタイプ、ユニオン タイプの場合、モジュール、または名前空間の名前に使用した場合、次の文字もダブルバッククォートマーク内で許可され ないことに注意してください:
.+$&[]/\\*\"`

がこのリストに加えて、@(アットマーク)は任意の名前で許可されていますが、警告発生します:

警告FS1104を:含む識別子が「@」F#コード生成

で使用するために予約されています

として近く、私が見つけることができるよう:

を文字のリストには名前IllegalCharactersInTypeAndNamespaceNamesでF#コンパイラで見つけることができます。識別子名エンティティに使用されている -

II.5.3識別子は:このよう

は、ILを生成するために使用され、その読み取りECMA-335 - Common Language Infrastructure (CLI) Partitions I to VIにつながります。単純な 識別子はIDに相当します。ただし、ILAsm構文では、Unicode 文字セット(パーティションIを参照)を使用して構成できる識別子の使用を で許可します。これを実現するために、識別子は を一重引用符で囲みます。

IDが始まる文字の連続した文字列のいずれか
英字(-Z、-Z)
又は_の一つ、$@`(墓アクセント)、又は?

英数字(A-Z、Z、0-9)
又は文字_$@`(墓アクセント)の任意の数が続き、そして?

+0

Unionタイプ大文字小文字が区別されます:内部で型にコンパイルされます。私の推測では、このリストはILの制限によって引き起こされます。 – Abel

+0

私はあなたの質問を編集する自由を取った、私は '@' - 署名が許可されていることが判明しましたが、警告を発します。完全性のためだけです;)。 – Abel

+1

@Abel私の質問や回答は自由に編集してください。それはすべてのCCであり、ここでそれを書いたらもう私のことを私のこととは考えません。それは問題ではないはず、ということ –

関連する問題