Sau khi một số chơi xung quanh F trở ngại # thành viên tính năng và chức năng viết như thế này:F trở ngại # thành viên +^a ByRef thông số
let inline parse< ^a when ^a : (static member Parse: string -> ^a) > s =
(^a: (static member Parse: string -> ^a) s)
đó làm việc hoàn toàn tốt đẹp:
let xs = [ "123"; "456"; "999" ] |> List.map parse<int>
Tôi đang cố gắng để viết khác func tryParse
, sử dụng phương pháp tĩnh TryParse
và kết thúc kết quả phân tích cú pháp thành loại 'a option
để được hỗ trợ tốt hơn trong F #. Một cái gì đó như thế này không biên dịch:
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
Lỗi này là:
lỗi FS0001: biểu hiện này được dự kiến sẽ có loại ByRef < 'a> nhưng ở đây đã gõ 'a ref
F # ref
-cell d oesn't work too:
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
Tôi đang làm gì sai?
Yikes, tôi nghĩ đây là một lỗi ... cũng, 'TryParse: string -> bool *^a' không hoạt động. –
Điều này dường như được sửa trong F # 3.0. – kvb