构建代码表达式 "Manually"
Building Code Expressions "Manually"
我想构造一个 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, [])
使用库手动构建引文很难正确完成,因此我强烈建议尽可能使用引文文字。但是,如果您愿意,这里是如何实现您的示例:
open Microsoft.FSharp.Quotations
Expr.PropertyGet(
Expr.ValueWithName({ foo = "foo" }, "bar"),
typeof<Foo>.GetProperty("foo"))
我想构造一个 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, [])
使用库手动构建引文很难正确完成,因此我强烈建议尽可能使用引文文字。但是,如果您愿意,这里是如何实现您的示例:
open Microsoft.FSharp.Quotations
Expr.PropertyGet(
Expr.ValueWithName({ foo = "foo" }, "bar"),
typeof<Foo>.GetProperty("foo"))