F# 仕様では、文法で次のように定義されています (セクション A.1.4.1)。
ident-char :
letter-char
digit-char
connecting-char
combining-char
formatting-char
'
_
connecting-char
として定義された
connecting-char : '\Pc'
私が信じていることは、それが満たすconnecting-char
任意の文字であることを意味しますc
System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) = UnicodeCategory. ConnectorPunctuation
これをテストすると、次の_
ようになります。
> System.Globalization.CharUnicodeInfo.GetUnicodeCategory('_');;
val it : System.Globalization.UnicodeCategory = ConnectorPunctuation
_
これは、それが有効であることを意味すると思いますconnecting-char
。これは、なぜ の特殊なケースがあるのかという疑問を提起し_
ます。
実際のコンパイラのソース コードでは、特別な処理はありません。_
( https://github.com/fsharp/fsharp/blob/master/src/fsharp/lex.fslから)、
let ident_char =
letter
| connecting_char
| combining_char
| formatting_char
| digit
| ['\'']
問題は、なぜ F# 仕様に_
in ident-char のエントリがあるのかということです。