Syntax 我可以用“吗?”;模糊的;使用IDisposable对象传递参数?
下面是我创建的一个简单的代码片段,以理解为什么我在代码中要在操作之前进行disposeSyntax 我可以用“吗?”;模糊的;使用IDisposable对象传递参数?,syntax,f#,parameter-passing,idisposable,Syntax,F#,Parameter Passing,Idisposable,下面是我创建的一个简单的代码片段,以理解为什么我在代码中要在操作之前进行dispose 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 dis
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
类型IType=
可继承的
摘要:字符串->单位
设St={
新的IType带有
成员i.say hi=Console.Write hi
成员i.Dispose()=控制台。编写“因此我已处理”
}
让我们说1(cmon:IType)=
一旦相应的SayN
退出,就会调用usingDispose
在第一种情况下,函数退出(因此调用dispose)并返回类型为string->()
的函数,然后执行该函数并打印其结果
在第二种情况下,打印结果,然后函数退出(因此在将字符串打印到控制台后调用Dispose)
我想说的是,最好的解决方案是使用DU作为参数-因此您可以定义
type t = |N |S of string ... //for all possible cases
然后你就让你的函数取一个类型为t
DU的参数作为参数?我不完全明白。请您提供一些与示例相关的示例。因此,您的Say变为let Say2(cmon:Itype)(arg:t)=使用t.Say s//此处的其他案例
。另外,您的语法有点奇怪,我使用的许多控制台。例如编写(arg:t)
仍然是一个参数。如果我想传递100个参数呢?那么您的一个DU案例是100个参数的| Long of int*int*..
,这有点难看,但在这种情况下,您最好使用数组。我的意思是类似于printf样式的参数,我想写Log“here%s%s”“lot”“of”“parameters”
看看你的最后几个问题,它们似乎有一个共同的主题。你到底想做什么?我想使用类似printf的语法来登录到文件。我正试图为它找到一个优雅的解决方案。那么为什么你不能使用fprintf呢?我使用它,但我想把它包装成IDisposable对象来处理StreamWriter
,正如这里给我的建议:但问题是我需要使用PrintfArgs->()函数