Nach einigem Herumspielen F # Mitglied Einschränkungen verfügen und Schreibfunktion wie folgt aus:F # Mitglied Einschränkungen +^a byref Parameter
let inline parse< ^a when ^a : (static member Parse: string -> ^a) > s =
(^a: (static member Parse: string -> ^a) s)
, die perfekt funktioniert gut:
let xs = [ "123"; "456"; "999" ] |> List.map parse<int>
Ich versuche zu schreiben andere func tryParse
, die statische Methode TryParse
verwendet und das Parse-Ergebnis in 'a option
Typ für bessere Unterstützung in F # umschließt. So etwas wie dies kompiliert nicht:
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
Der Fehler ist:
Fehler FS0001: Dieser Ausdruck wurde Typ byref < ‚a> aber hier geben hat zu erwarten 'a ref
F # ref
-zellen d funktioniert auch nicht:
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
Was mache ich falsch?
Huch, ich denke, das ist ein Fehler ... auch, 'Tryparse: string -> bool *^a' funktioniert nicht. –
Dies scheint in F # 3.0 behoben zu sein. – kvb