2016-02-21 10 views
5

używam F # 4.0/VS-2015F # Jednostki miary z symbolami znaków Unicode, jakie jest dokładne ograniczenie?

to dobrze

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

ale to byłby ładniejszy

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

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

Ponieważ% stosuje się w F #, wszelkie inne symbole Unicode mogą być używany. Niektóre z nich są dozwolone, a inne nie.

Pytanie brzmi, jakie są ograniczenia?

Znając ten fakt, dla innych aplikacji wyszukiwanie symboli Unicode może być wstępnie filtrowane.

dozwolone

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

niedozwolone

[<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 _% 

Odpowiedz

4

Więc jeśli nurkować przez spec, typu środek musi zacząć

ident-Start-char: List-char lub "_"

gdzie litera-char jest z jednej z następujących klas unicode:

'\ Lu' '\ LI' '\ Lt' '\ Lm' '\ Lo' '\ NL'

Nie sprawdziłem, czy twoje postacie są w tych klasach, ale myślę, że ogólnie rzecz biorąc, powinno być dozwolone coś, co wygląda jak litery.

+0

[] typ _% // niedozwolony –

+0

No cóż, nie miałem kompilatora do sprawdzenia - zaktualizuje –

+0

klasa unicode "\ Nl" jest literą numeryczną, myślę. Więc nie jest to możliwe: [] typ 42 –

Powiązane problemy