撇開我們是否應該使用的測量單位,像角無單位的概念,假設我有定義degree
和radian
單位在F#如何在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>)
我可以比較輕鬆地使用他們喜歡
4.0<degree> |> degree.ToRadians
似乎像擴展成員會更加輕鬆。所以我還是說
let d = 4.0<degree>
let r = d.ToRadians()
但我不能確定延長部件的明顯的方式
type float<degree> with
member degrees.ToRadians() = degree.ToRadians(degrees)
...這讓我下面的錯誤
error FS0010: Unexpected identifier in type name. Expected infix operator, quote symbol or other token.
是否有F#中度量單位的擴展成員的語法技巧,還是支持的功能?
我會冒險猜測它不被支持。我試過的所有東西都給出了錯誤:'度量聲明可能只有靜態成員'。 – Daniel
問題是編譯後刪除了度量類型信息,所以在運行時一切都只是一個'float',因此調用一個實例方法沒有意義 –
@jpalmer。在編譯期間,擴展成員是靜態解析的。 –