。同様のものに基づいて一致させる方法はありますか?アクティブパターンと部材制約
上記のようにインライン関数の制約に一致するメソッドに渡される引数が、その関数をトリガし、その他すべてがエラー管理の一部として終了するアクティブなパターンを作成したいとします。
。同様のものに基づいて一致させる方法はありますか?アクティブパターンと部材制約
上記のようにインライン関数の制約に一致するメソッドに渡される引数が、その関数をトリガし、その他すべてがエラー管理の一部として終了するアクティブなパターンを作成したいとします。
インラインアクティブパターンも作成できるようです。私はこれまでこれを使用していませんでしたが、今試しましたが、うまくいくようです。今、あなたはTest
メソッドを定義するいくつかのオブジェクトを定義し、パターン使用してそれらを一致させることができます
let inline (|Test|_|) (a:^T) : option<^R> =
(^T : (member Test : unit -> option<^R>) a)
:
type A() =
member x.Test() = Some(10)
match new A() with
| Test(n) -> printfn "%d" n
| _ -> printfn "failed"
これを以下Test
パターンがoption<^R>
を返すTest
方法を実装する任意のオブジェクトで使用することができますパターンマッチングはオブジェクトの一部になっているので、非常に興味深いテクニックのように見えます。
あなたは反射を使用する必要があると思います。 o:obj
を受け取ってからo.GetType()
のメンバーに反映させる関数があります。