[英]f# function that returns a generic function
我想做以下事情:
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)
但也許別無他法......
你不能編寫一個在F#中返回泛型函數的函數。 有兩種方法可以解決這個問題:
因此,第二個代碼段中的代碼不起作用,但您可以這樣做:
let myConnection = new Connection(connectionString)
let save arg = SaveAsync myConnection arg
save {FooProperty = 212313}
save {BarProperty = 212313}
這里, save
被定義為一個函數,因此它可以是通用的,但它仍然可以捕獲現有的已打開連接myConnection
並將其用於您提供的所有不同參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.