Я поднял это до [email protected]

того, как вы поиграете в 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>

Я пытаюсь написать другой функционал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 < 'а> но тут есть тип'ссылка

F #ref-клетки тоже не работают:

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

Что я делаю неправильно?

Ответы на вопрос(3)

Ваш ответ на вопрос