2

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 のエントリがあるのか​​ということです。

4

1 に答える 1

1

これは、歴史的な理由 (SML の F# のルーツから継承) またはアンダースコアが含まれていることを明確にするため (典型的な識別子規則から予想されるように: アンダースコアまたはアルファベットの後に 0 個以上のアンダースコアまたは英数字が続く) のいずれかであると予想しています。 .

(しかし、これは憶測です。実際の回答については、F# チームに尋ねてみませんか?)

于 2012-09-22T10:38:59.857 に答える