2016-08-19 8 views
2

F#コード式を作成したいと思います。しかし、私はコード引用を介してそれをしたくないが、オブジェクトを介してそれを構築する。 しかし、それを行う方法に関するドキュメントはかなり不足しています。ビルドコード式「手動」

次のスニペット

これは exのために得
type Foo = { foo = string} 
let bar = {foo = "foo"} 
let ex = <@ bar.foo @> 

考えます。

PropertyGet (Some (ValueWithName ({foo = "foo";}, bar)), foo, []) 

しかし、私は単純に上記のよう正確な用語を複製傾けます。たとえば、コンストラクタValueWithNameには何も見つかりません。それでは、どのよう私

<@ bar.foo @> = PropertyGet (Some (ValueWithName ({foo = "foo";}, bar)), foo, []) 

答えて

4

は手動で引用を構築するためのライブラリを使用することができます

を正しく行うことは非常に困難であるので、どこにすることができます私は非常に引用リテラルを使用してお勧めします。ただし、次のようにしたい場合は、例を達成する方法は次のとおりです。

open Microsoft.FSharp.Quotations 

Expr.PropertyGet(
    Expr.ValueWithName({ foo = "foo" }, "bar"), 
    typeof<Foo>.GetProperty("foo"))