2016-02-21 17 views
5

tôi sử dụng F # 4.0/VS-2015F # Đơn vị đo bằng ký hiệu Unicode ký tự, hạn chế chính xác là gì?

này hoạt động tốt

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

nhưng điều này sẽ đẹp hơn

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

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

Do% được sử dụng trong F #, bất kỳ biểu tượng Unicode khác có thể đã sử dụng. Một số người trong số họ được phép và một số thì không được phép.

Câu hỏi đặt ra là, các hạn chế là gì?

Khi biết điều này, đối với các ứng dụng khác, tìm kiếm các ký hiệu Unicode có thể được lọc trước.

phép

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

không được phép

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

Trả lời

4

Vì vậy, nếu bạn bổ nhào qua spec, Một loại biện pháp phải bắt đầu với

ident-start-char: letter-char hoặc "_"

nơi thư-char là từ một trong các lớp unicode sau:

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

Tôi chưa thực sự kiểm tra xem các nhân vật của bạn có nằm trong các lớp đó không, nhưng tôi nghĩ ý tưởng chung là những thứ giống như các chữ cái sẽ được cho phép.

+0

[] nhập _% // không được phép –

+0

Ồ, tôi không có trình biên dịch để kiểm tra - sẽ cập nhật –

+0

lớp unicode '\ Nl' là chữ số, tôi nghĩ vậy. Vì vậy, điều đó là không thể: [] loại 42 –

Các vấn đề liên quan