F # restricciones de miembros + ^ a byref parámetros
Después de jugar un poco, la función de restricciones de miembros de F # y la función de escritura son las siguientes:
let inline parse< ^a when ^a : (static member Parse: string -> ^a) > s =
(^a: (static member Parse: string -> ^a) s)
Eso funciona perfectamente bien:
let xs = [ "123"; "456"; "999" ] |> List.map parse<int>
Estoy tratando de escribir otras funcionestryParse
, que usa un método estáticoTryParse
y envuelve el resultado del análisis en'a option
escriba para un mejor soporte en F #. Algo como esto no compila:
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
El error es:
error FS0001: se esperaba que esta expresión tuviera tipobyref <'a> pero aquí tiene tipo'una referencia
F#ref
-células no funciona también:
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
¿Qué estoy haciendo mal?