F#单位的度量与Unicode字符符号,具体的限制是什么?

Fun*_*l_S 5 unicode f# units-of-measurement

我使用F#4.0/VS-2015

这很好用

[<Measure>] type percent
let x1 = 100<percent>
Run Code Online (Sandbox Code Playgroud)

但这会更好

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

[<Measure>] type €  // Euro
let cost = 99.99<€>
Run Code Online (Sandbox Code Playgroud)

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

问题是,有哪些限制?

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

允许

[<Measure>] type ?   // U+1696
[<Measure>] type ?  // U+154E
[<Measure>] type ?  // U+0D96
let x3 =   0<?>
let x4 =  50<?>
Run Code Online (Sandbox Code Playgroud)

不允许

[<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 _%
Run Code Online (Sandbox Code Playgroud)

Joh*_*mer 4

因此,如果您仔细研究规范,测量类型必须以

ident-start-char:字母字符或“_”

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

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

我实际上并没有检查你的角色是否属于这些类别,但我认为总体思路是应该允许看起来像字母的东西。