2016-11-06 6 views
2

Quotationのレコードからフィールドの型付き値を取得したいとします。それはまっすぐ進むべきであるように思われるが、私は少し失われている。見積もりからフィールド値を取得し、その型にキャスト

例えば、

type FullName = { First : string; Last : string } 

type Name = { Name : FullName } 

let t = { Name = { First = "Jon"; Last = "N" } } 

let name = <@ t.Name.First @> 

その後、私は値nameを取り、string(ないobj)としてJonを取得したいと思います。どうすればいい?戻り値はArrayまたは別のRecordになることがあります。

ありがとうございます!

更新:

それはnullのためにチェックする必要があるので、私は、F#の縁でこの機能を使用することがあります:

let getValue (expr: Quotations.Expr<'t>) = 
    match eval expr with 
    | null -> None 
    | x -> Some ((eval expr) :?> 't) 
+0

見積もりをコンパイルして実行する必要があるようです。または私は何かを逃していますか? – Gustavo

+0

見積から実際の値をタイプで抽出するにはどうすればよいですか?申し訳ありませんが、私はそれをより明確にする方法がわかりません。 – Jon49

+0

今、私はスクリプトでそれを試しています。私はそこに私を得させるこのスニペットを見つけましたが、それは 'obj'でそれを返します。http://www.fssnip.net/h1 – Jon49

答えて

4

あなたがリンクされeval scriptが半分の方法がありますを取得します - あなたのために表現の実際の値を計算します。今やって残っているすべては、適切な型にその値をキャストすることです。覚えておいてください

let getValue (expr: Quotations.Expr<'t>) = (eval expr) :?> 't 

let valueOfName = getValue name // valueOfName : string 

は、理論的にキャストがクラッシュすることがあることが、 evalは常に戻ってくるので、実際にはそれが、起こるべきではありません(バグがない限り)正しい型の値。

関連する問題