我想做以下事情:
module private repo =
let SaveEvts<'T> (conn:IConnection) mydata =
async {
let! result = conn.SaveAsync(mydata)
}
let SaveAsync (conn:IConnection) = repo.SaveEvts conn
这样我可以打开一个到我的数据库的单个连接,然后在我想要保存某些类型的T数据时关闭我的连接。例如:
type Foo = { idPhoto : Guid }
type Bar = { reason : string }
let myConnection = new Connection(connectionString)
let save = SaveAsync myConnection
let doProgram =
save<Foo>({idPhoto = 212313})
save<Bar>({idPhoto = 212313})
这是幻想写作,我不知道它是否编译:我的问题是
我想避免写作:
let saveFoo = SaveEvts<Foo> (conn:IConnection)
let saveBar = SaveEvts<Bar> (conn:IConnection)
但也许没有别的办法......
答案 0 :(得分:3)
您无法编写在F#中返回泛型函数的函数。有两种方法可以解决这个问题:
因此,您的第二个代码段中的代码无效,但您可以这样做:
let myConnection = new Connection(connectionString)
let save arg = SaveAsync myConnection arg
save {FooProperty = 212313}
save {BarProperty = 212313}
这里,save
被定义为一个函数,因此它可以是通用的,但它仍然可以捕获现有的已打开连接myConnection
并将其用于您提供的所有不同参数。< / p>