F#度量单位中的Unicode字符符号,有哪些精确限制?

5
我使用 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 _%
1个回答

4

因此,如果您仔细阅读规范,度量类型必须以

ident-start-char:letter-char或"_"开头

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

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

我实际上没有检查您的字符是否属于这些类别,但我认为一般的想法是应该允许看起来像字母的东西。


[<Measure>]类型 _% // 不允许 - Functional_S
哦,好吧,我没有编译器来检查 - 我会更新。 - John Palmer
Unicode类'\Nl'是数字字母,我认为。所以这是不可能的:[<Measure>]类型42。 - Functional_S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接