gpt4 book ai didi

f# - 我如何创建一个带参数的计算表达式?

转载 作者:行者123 更新时间:2023-12-04 23:08:15 27 4
gpt4 key购买 nike

我想创建几个计算表达式,用于访问数据库并返回像这样的项目列表(我在代码注释中也有问题):

let foo x y z = proc "foo" {
let! cmd = proc.CreateCommand() // can I do this?
do! In "x" DbType.Int32 // would i gain anything by replacing DbType with a union
// type since the names would match actual data types?
do! In "y" DbType.String 15;
cmd?x <- x
cmd?y <- y
use! r = cmd.ExecuteReader() // would this be bad form for creating a workflow builder?
return! r {
let item = MyItem()
do! item.a <- r.GetInt32("a")
do! item.a <- r.GetString("b")
do! item.c <- r.GetDateTime("c")
yield! item
}
}

如何创建工作流构建器,使其实例接受参数?
let proc name = ProcedureBuilder(connStr, factory) // how do I do this?

最佳答案

是的,你可以这样做。您可以在具有静态已知类型的任何表达式之后使用计算表达式语法以公开正确的方法。所以下面的代码有效(但没有做任何特别有趣的事情):

let f x = async
let v = f "test" { return 1 }

在这里, f有类型 'a -> AsyncBuilder ,所以 f "test"有类型 AsyncBuilder并且可以跟随计算表达式语法。您的 let proc name = ProcedureBuilder(connStr, factory) 示例完全没问题,假设 ProcedureBuilder被适本地定义,尽管您可能想要 name出现在构造函数参数的某处。

关于f# - 我如何创建一个带参数的计算表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5996171/

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