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 <'a>であると予想されて いましたが、ここではタイプ ' arefです。
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
私は何が間違っているのですか?