构建代码表达式"手动"

时间:2016-08-19 14:55:28

标签: f# quotations

我想构建一个F#代码表达式。但是,我不想通过代码引用来做到这一点,而是通过对象构建它。 但是,关于如何做到这一点的文档非常缺乏。

给出以下代码段

type Foo = { foo = string}
let bar = {foo = "foo"}
let ex = <@ bar.foo @>

这会产生ex

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

但我不能复制上面的确切术语。例如,我在构造函数ValueWithName上找不到任何内容。

那我怎么能

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

1 个答案:

答案 0 :(得分:4)

使用库手动构建报价很难正确执行,因此我强烈建议您尽可能使用报价文字。但是,如果您想要:

,请参阅以下示例
open Microsoft.FSharp.Quotations

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