圍繞F#成員的約束功能的一些遊戲和寫作之類的函數在這之後:F#成員限制+ ^一按地址參數
let inline parse< ^a when ^a : (static member Parse: string -> ^a) > s =
(^a: (static member Parse: string -> ^a) s)
這工作完全正常:
let xs = [ "123"; "456"; "999" ] |> List.map parse<int>
我想寫其他func tryParse
,它使用靜態方法TryParse
,並將解析結果包裝爲'a option
類型,以便在F#中提供更好的支持。這樣的事情並不編譯:
let inline tryParse s =
let mutable x = Unchecked.defaultof< ^a>
if (^a: (static member TryParse: string * ^a byref -> bool) (s, &x))
then Some x else None
的錯誤是:
錯誤FS0001:是 預計這種表達有型 按地址<「一>但這裏的類型爲 'a ref
F#ref
-cells d不工作太:
let inline tryParse s =
let x = ref Unchecked.defaultof< ^a>
if (^a: (static member TryParse: string * ^a byref -> bool) (s, x))
then Some x else None
我做錯了什麼?
哎呀,我想這是一個錯誤......另外,`TryParse:string - > bool *^a`不起作用。 – 2011-01-11 14:02:58
這似乎在F#3.0中得到修復。 – kvb 2012-09-28 18:49:03