这是我创建的简单片段,用于理解为什么我在代码
中操作之前已经处置掉了type IType =
inherit IDisposable
abstract say : string -> unit
let St = {
new IType with
member i.say hi = Console.Write hi
member i.Dispose() = Console.Write "So I disposed"
}
let Say1(cmon : IType) =
using <| cmon
<| fun lol -> lol.say
Say1 St " :( " // So I disposed :(
printfn ""
let Say2(cmon : IType) (smile : string) =
using <| cmon
<| fun lol -> lol.say smile
Say2 St " :) " // :) So I disposed
我在这里有两个问题。
St
?IDisposable
?我需要它,因为我想传递printf相似的参数,我不知道它的数量。
答案 0 :(得分:2)
Dispose在退出相应的SayN
后调用。
在第一种情况下,函数退出(因此调用dispose)并返回类型string -> ()
的函数,然后执行该函数并打印其结果。
在第二种情况下,打印结果然后函数退出(因此在将字符串打印到控制台后调用Dispose)
我想说最好的解决方案是使用DU作为参数 - 所以你定义
type t = |N |S of string ... //for all possible cases
然后你只需让你的函数采用t