【问题标题】:Code quotations and Expression trees代码引用和表达式树
【发布时间】:2011-11-15 09:07:33
【问题描述】:

我想知道这两个功能在后台的实现方式是否有任何区别? IE。代码引用不只是建立在旧的良好表达式树之上吗?

谢谢。

【问题讨论】:

    标签: f# expression-trees quotations


    【解决方案1】:

    这两种类型非常相似,但它们的表示方式不同。

    • 报价以更实用的方式设计。例如foo a b 将表示为一系列应用程序App(App(foo, a), b)

    • 引号可以表示一些仅在 F# 中可用的构造,使用表达式树会隐藏它们。例如,Expr.LetRecursive 用于 let rec 声明

    • 引用最初是在 .NET 3.0 中引入的。那时表达式树只能表示 C# 表达式,因此无法轻松捕获所有 F# 构造(引号可以捕获任何 F# 表达式,包括命令式)。

    • 引号也被设计成易于使用递归处理。 ExprShape 模块包含的模式允许您仅用 4 种情况处理所有可能的引用(这比在 C# 中使用数十种方法实现访问者模式要容易得多)。

    当您有 F# 引用时,您可以使用 FSharp.Quotations.Evaluator 将其转换为 C# 表达式树。如果您使用一些需要来自 F# 的表达式树的 .NET API,这将非常有用。据我所知,没有相反的翻译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多