我想构建一个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, [])
答案 0 :(得分:4)
使用库手动构建报价很难正确执行,因此我强烈建议您尽可能使用报价文字。但是,如果您想要:
,请参阅以下示例open Microsoft.FSharp.Quotations
Expr.PropertyGet(
Expr.ValueWithName({ foo = "foo" }, "bar"),
typeof<Foo>.GetProperty("foo"))