デバッグの目的で、浮動小数点の詳細はprintfn "%A"
が私に与えているすべてのテストコードが一般化されています。だから、私はbox
とタイプにマッチして意味のある出力を得ました。一般化された型を基底の区別された共用体にキャストする場合
ただし、タイプはオプションタイプまたはResult<_, _>
タイプ(成功/失敗)です。これらのタイプは、パターンマッチあなたが区別労働組合として扱うが、私は場合、彼らはヒットしません、それらを入力し、テスト:
// Illustrative example of what I'm trying to achieve (I think)
let rec mkStr v =
match box v with
| :? double as dbl -> Str.fromFloat dbl
| :? int64 as i -> i.ToString()
| _ ->
match v :> obj with
| :? Result<_, _> as res -> // this will never succeed
match res with
| Success s -> mkStr s
| Fail _ -> "Fail"
| x ->
x.ToString()
私は、上記のボクシング/アンボクシング/鋳物の様々な試みましたこれらの品種の1つです。私がデバッグすると、Success
が通過していることが明確にわかりますが、デバッガではResult
と表示されません。 DUの各ディスクリミネータはそれ自体がタイプなので、何が起こっているのか理解していますが、Success
またはFail
のいずれかと一致するとDUとして扱うようにコンパイラに指示するにはどうすればよいですか?
TLDR:一般化された型が与えられている場合、型がある場合は、どのようにその型を基礎となるDUにテストしキャストできますか?
(PS:私は、これは通常、DUの約進むべき道ではないことを認識し、しかしprintf "%A"
が存在しているだけのように、私はこのような状況のように、時折、これは必要とされていると仮定)を取得するために相場を使用して
http://stackoverflow.com/q/3151099/82959、http://stackoverflow.com/q/39875110/82959、およびhttp://stackoverflow.com/q/2140079/82959を参照してください。 – kvb
@kvb、私はすでに再選が必要だと恐れていた。しかし、アクティブなパターンと引用符で、いい解決策です。ありがとう。なぜ私はGoogleでそれを見つけられなかったのか分かりません。 – Abel