F# - 从 Expr 中提取选项
有没有办法从 Expr
中提取参数?
一个例子:
let hasStringOption (e:Expr<string option>) =
let myOption : string option = ..some code to get the string option from e
如何获取 Expr
中的 string option
并将其分配给 myOption
?
Is there a way to extract a parameter from an Expr
?
An example:
let hasStringOption (e:Expr<string option>) =
let myOption : string option = ..some code to get the string option from e
How would I get the string option
inside the Expr
and assign it to myOption
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在您的示例中,
字符串选项
表示表达式返回类型,因此表达式本身可以任意复杂,并且需要某种评估策略,例如 @wmeyer 所示的 PowerPack。但是,如果您实际上有一个
字符串选项
表达式,您可以使用标准库引用活动模式和反射来实现您自己的评估策略(此处显示的通用选项):事实上,这种方法可能是您自己的策略的一部分,用于使用反射和活动模式递归地评估任意表达式,而不是 PowerPack 缓慢且有限的中间 LINQ 策略。
In your example,
string option
represents the expression return type, so the expression itself could be arbitrarily complex and requires some kind of evaluation strategy like the PowerPack's as @wmeyer has shown.But if you actually have a
string option
expression you can use the standard library quotation active patterns and reflection to implement your own evaluation strategy (generic option shown here):and indeed, such an approach may be a piece of your own strategy for recursively evaluating arbitrary expressions using reflection and active patterns rather than PowerPack's slow and limited intermediate LINQ strategy.
引用
FSharp.PowerPack.Linq.dll
后,您可以执行以下操作:但是,据报道,这非常慢,并且使用 LINQ 表达式作为中间步骤。
With
FSharp.PowerPack.Linq.dll
referenced you can do:However, reportedly this is quite slow and uses LINQ expressions as an intermediary step.
遗憾的是(或没有),您无法评估 F# 引用。 F# PowerPack 将引用编译为 LINQ 表达式(可以进行求值)的能力有限。
Sadly (or not), you cannot evaluate F# quotations. The F# PowerPack has a limited ability to compile quotations to LINQ expressions (which can be evaluated).