F# “建筑规范表达式”;“手动”;

F# “建筑规范表达式”;“手动”;,f#,quotations,F#,Quotations,我想构造一个F#代码表达式。然而,我不想通过代码引用来实现这一点,而是通过对象来构建它。 然而,关于如何做到这一点的文档非常少 给出以下代码片段 type Foo = { foo = string} let bar = {foo = "foo"} let ex = <@ bar.foo @> 但我无法复制上面的确切术语。例如,我在构造函数ValueWithName上找不到任何内容 那我怎么办 <@ bar.foo @> = PropertyGet (Some (Valu

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

给出以下代码片段

type Foo = { foo = string}
let bar = {foo = "foo"}
let ex = <@ bar.foo @>
但我无法复制上面的确切术语。例如,我在构造函数
ValueWithName
上找不到任何内容

那我怎么办

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

使用库手动构造引用非常困难,因此我强烈建议尽可能使用引用文本。但是,如果您想实现您的示例,请执行以下操作:

open Microsoft.FSharp.Quotations

Expr.PropertyGet(
    Expr.ValueWithName({ foo = "foo" }, "bar"), 
    typeof<Foo>.GetProperty("foo"))
打开Microsoft.FSharp.quotes
Expr.PropertyGet(
Expr.ValueWithName({foo=“foo”},“bar”),
typeof.GetProperty(“foo”))
open Microsoft.FSharp.Quotations

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