我可以使用IDisposable对象的“模糊”参数传递吗?

时间:2013-04-29 06:55:46

标签: syntax f# parameter-passing idisposable

这是我创建的简单片段,用于理解为什么我在代码

中操作之前已经处置掉了
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相似的参数,我不知道它的数量。

1 个答案:

答案 0 :(得分:2)

Dispose在退出相应的SayN后调用。

在第一种情况下,函数退出(因此调用dispose)并返回类型string -> ()的函数,然后执行该函数并打印其结果。

在第二种情况下,打印结果然后函数退出(因此在将字符串打印到控制台后调用Dispose)

我想说最好的解决方案是使用DU作为参数 - 所以你定义

type t = |N |S of string ... //for all possible cases

然后你只需让你的函数采用t

类型的参数