После некоторой игры вокруг F имеет ограничение # членов и функция письма, как это:F ограничение # члена +^а ByRef параметров
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
ошибка: Это выражение, как ожидается, иметь тип ByRef < «а>, но здесь имеет тип 'a ref
F # ref
-cells d Кроме того, не работает:
Что я делаю неправильно?
Yikes, я думаю, это ошибка ... также, 'TryParse: string -> bool *^a' не работает. –
Это, по-видимому, исправлено в F # 3.0. – kvb