F# Units of Measures with Unicode characters symbols,确切的限制是什么?

F# Units of Measures with Unicode characters symbols, what is the exact restriction?

我使用 F# 4.0 / VS-2015

这个很好用

[<Measure>] type percent
let x1 = 100<percent>

但这样会更好

[<Measure>] type %  // Percent
let x2 = 100<%>

[<Measure>] type €  // Euro
let cost = 99.99<€>

因为在 F# 中使用了 %,所以可以使用任何其他 Unicode 符号。 有些是允许的,有些不是。

问题是,有什么限制?

了解这一点后,对于其他应用程序,可以预先过滤对 Unicode 符号的搜索。

允许

[<Measure>] type ᚖ   // U+1696
[<Measure>] type ᕎ  // U+154E
[<Measure>] type ඖ  // U+0D96
let x3 =   0<ඖ>
let x4 =  50<ᕎ>

不允许

[<Measure>] type (%)    // error FS0010: Unexpected prefix operator in type name. Expected infix operator, quote symbol or other token.    
[<Measure>] type  %     // error FS0010: Unexpected symbol '{0} in type name
[<Measure>] type (﹪)    // error FS0010: Unexpected character '﹪' in type name. Expected infix operator, quote symbol or other token.     
[<Measure>] type ﹪      // error FS0010: Unexpected character '﹪' in type name
[<Measure>] type ﹪  // ﹪ U+FE6A       
[<Measure>] type ٪   // ٪ U+066A     
[<Measure>] type %   // % U+0025          
[<Measure>] type %  // % U+FF05         
[<Measure>] type ‰   // ‰ U+2030 promille
[<Measure>] type €   // € U+20AC
[<Measure>] type ≷   // ≷ U+2277
[<Measure>] type _%

因此,如果您深入了解规范,度量类型必须以

开头

ident-start-char:letter-char or "_"

其中 letter-char 来自以下 unicode 之一 类:

'\Lu' '\Ll' '\Lt' '\Lm' '\Lo' '\Nl'

我还没有真正检查过你的字符是否在那些 类 中,但我认为一般的想法是应该允许看起来像字母的东西。