0

这是我创建的简单代码段,用于了解为什么我在代码中的操作前处理

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 - 类似的参数,但我不知道它的数量。

4

1 回答 1

2

Dispose 一旦相应SayN的退出就被调用。

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

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

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

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

然后你只需让你的函数接受一个类型的参数t

于 2013-04-29T08:05:02.143 回答