4
オブジェクトを返す関数の結果をどのように取ってF#の区別されたユニオンにキャストしますか?F#で差別化されたユニオン上のマッチを折りたたむ方法
問題シナリオでは、私はセレンのwebdriverでjavascript executorを使って作業しています。ドキュメントは、出力がcertianタイプまたはタイプのリストのオブジェクトであることを指定します。 (Ref https://www.w3.org/TR/webdriver/#executing-script)
私は、返されたオブジェクトに、識別されたユニオンにキャストすることによっていくつかの構造体を与えて、後でそれにマッチさせることができます。
キャストは直接動作しません。キャストはコンストラクタを持つことができません。そのため、キャストすることはできません。これについて正しい方法は何ですか?
type JsResult =
| E of IWebElement
| I of Int64
| B of bool
| S of String
| LE of IWebElement list
| LI of Int64 list
| LB of bool list
| LS of String list
| N of Object
override self.ToString() =
match self with
| E e -> e.Text
| I i -> i.ToString()
| B b -> b.ToString()
| S s -> s
| LE le -> String.concat " " (le |> Seq.map(fun x-> x.Text))
| LI li -> String.concat " " (li |> Seq.map(fun x-> x.ToString()))
| LB lb -> String.concat " " (lb |> Seq.map(fun x-> x.ToString()))
| LS ls -> String.concat " " ls
| N _ -> String.Empty
let execute script : JsResult = (browser :?> IJavaScriptExecutor).ExecuteScript(script) :> JsResult