gpt4 book ai didi

f# - 扩展查询表达式

转载 作者:行者123 更新时间:2023-12-04 05:07:42 26 4
gpt4 key购买 nike

是否有任何文档或示例说明如何扩展/添加新关键字来查询表达式?这有可能吗?

例如,我想添加一个超前/滞后运算符。

最佳答案

除了@pad提到的query builder for the Rx Framework,F#团队的Wonseok Chae还谈到了包含查询表达式的计算表达式。我不确定 session 是否已录制,但是very detailed slides上有一个很酷的示例,用于生成.NET IL代码的查询语法。

source code of the standard F# query builder可能是找出支持哪些类型的操作以及如何使用属性对其进行注释的最佳资源。
where子句演示了您可能需要的关键属性:

[<CustomOperation("where",MaintainsVariableSpace=true,AllowIntoPattern=true)>]
member Where :
: source:QuerySource<'T,'Q> *
[<ProjectionParameter>] predicate:('T -> bool) -> QuerySource<'T,'Q>
CustomOperation属性定义操作的名称。 (非常重要的)参数 MaintainsVariableSpace允许您说操作返回的值类型与输入的类型相同。在这种情况下,先前定义的变量在操作后仍然可用。例如:
query { for p in db.Products do
let name = p.ProductName
where (p.UnitPrice.Value > 100.0M)
select name }

在这里,在 p之后仍然可以访问变量 namewhere,因为 where仅过滤输入,但不转换列表中的值。

最后, ProjectionParameter允许您说 p.UnitValue > 100.0M实际上应该变成一个接受上下文(可用变量)并计算该表达式的函数。如果不指定此属性,则该操作仅获取参数的值,如下所示:
query { for p in .. do
take 10 }

在这里,参数 10只是一个简单的表达式,不能使用 p中的值。

关于f# - 扩展查询表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com