3

这里有 4 个与 F# 代码引用密切相关的问题——

如何调用 F# 代码引用?

它的调用效率是否会低于普通的旧 F# lambda?到什么程度?

它是否需要对高级反射或代码发射功能的运行时支持(我所针对的嵌入式平台通常不存在或禁止这些功能)?

4

1 回答 1

5

报价只是数据,所以你可以用你想出的任何聪明的方式来“调用”它们。例如,您可以简单地遍历树并解释每个节点,尽管如果您尝试多次使用该值并且它不是一个简单的值(例如,如果您引用了 lambda你想重复调用)。

如果您想要更高性能(也更简单)的东西,那么您可以使用Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation. 这不支持所有可能的引用(只是大致相当于 C# LINQ 表达式的集合),并且必须做更多的工作才能实际生成 IL 等,但如果您重用结果,这应该会更有效. 这通过首先将引用转换为 C# 表达式树然后使用在Compile那里定义的标准函数来完成它的工作,因此它只能在支持它的平台上工作。

于 2014-04-18T20:06:07.853 回答