Gác lại cho dù chúng ta nên sử dụng đơn vị đo lường cho các khái niệm unitless như góc, giả sử tôi có định nghĩa degree
và radian
đơn vị trong F #Làm cách nào để xác định thành viên mở rộng trên đơn vị đo lường F #?
type [<Measure>] degree =
static member ToRadians (d:float<degree>) : float<radian> = d * (Math.PI * 1.<radian>)/180.0<degree>
and [<Measure>] radian =
static member ToDegrees (r:float<radian>) : float<degree> = r * 180.0<degree>/(Math.PI * 1.<radian>)
tôi có thể sử dụng chúng tương đối dễ dàng như
4.0<degree> |> degree.ToRadians
Dường như các thành viên mở rộng thậm chí còn dễ dàng hơn. Vì vậy, tôi chỉ có thể nói
let d = 4.0<degree>
let r = d.ToRadians()
Nhưng tôi không thể xác định các thành viên mở rộng một cách rõ ràng
type float<degree> with
member degrees.ToRadians() = degree.ToRadians(degrees)
... Đây được cho tôi những lỗi sau
error FS0010: Unexpected identifier in type name. Expected infix operator, quote symbol or other token.
Có cú pháp cú pháp cho các thành viên mở rộng trên các đơn vị đo lường trong F #, hoặc là tính năng được hỗ trợ?
Tôi sẽ nguy hiểm khi đoán rằng nó không được hỗ trợ. Tất cả mọi thứ tôi đã thử đã đưa ra lỗi: 'Các phép khai báo có thể chỉ có các thành viên tĩnh'. – Daniel
Vấn đề là thông tin loại đo được loại bỏ sau khi biên dịch, do đó, ở thời gian chạy mọi thứ chỉ là một 'float' để gọi một phương thức thể hiện không có ý nghĩa –
@jpalmer. Trong các thành viên mở rộng biên dịch được giải quyết tĩnh. –